由于我将网站从共享主机移动到VPS(两者都具有相同的Linux操作系统,php版本5.2.9和Perl版本5.8.8),因此我的功能无法正常工作
当我的脚本将远程文件存储到本地目录中时,我使用XMLHttpRequest定期(5秒)运行一个简单的PHP脚本,这个php脚本执行一个返回当前文件大小的Perl脚本(已经下载的字节数)。
这是php代码:
<?php
if (isset($_GET['file'])) {
clearstatcache();
$file = $_GET['file'];
exec("/usr/bin/perl /home/xxxxxx/public_html/cgi-bin/filesize.pl $file", $output);
//print_r($output);
if (!empty($output) || $output[0] != "") {
$currentSize = $output[0];
file_put_contents('progress.txt', $currentSize);
} else {
...
...
}
}
?>
这是Perl代码
#!/usr/bin/perl
$filename = $ARGV[0];
$filepath = '/home/xxxxxx/public_html/tmp_dir/'.$filename.'.flv';
$filesize = -s $filepath;
print $filesize;
当我在共享服务器上运行这些脚本时,我没有遇到任何问题并且可以看到下载进度,但是现在,仅在完全下载远程文件并且看不到进度时才会打印文件大小
我想我需要在php设置中更改一些内容,但我不确定,我不知道需要更改什么。
好的,对不起/笨,filesize()函数运行正常,谢谢大家。
答案 0 :(得分:2)
如果您需要文件大小,您也可以从PHP调用filesize
函数,并避免必须完全使用perl。
答案 1 :(得分:1)
问题可能是由不同的文件位置引起的。你肯定文件'/home/xxxxxx/public_html/tmp_dir/'.$filename.'.flv'
存在吗?你可以用以下方法测试它:
if (-e '/home/xxxxxx/public_html/tmp_dir/'.$filename.'.flv')
请记住,您可以使用PHP filesize()
代替:
<?php
if (isset($_GET['file'])) {
clearstatcache();
$file = $_GET['file'];
if (file_exists("/home/xxxxxx/public_html/tmp_dir/$file.flv") {
$currentSize = filesize("/home/xxxxxx/public_html/tmp_dir/$file.flv");
file_put_contents('progress.txt', $currentSize);
} else {
...
...
}
}
?>