PHP / Perl文件大小功能无法在新服务器上运行

时间:2011-05-16 06:48:29

标签: php perl filesize

由于我将网站从共享主机移动到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()函数运行正常,谢谢大家。

2 个答案:

答案 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 {
        ...
        ...
    }
}
?>