2011-05-16 126 views
0

我有一个功能不能正常工作,因为我已经将我的网站从共享主机移动到VPS(都具有相同的Linux操作系统,PHP版本5.2.9和Perl 5.8.8版)。PHP/Perl文件大小功能不能在新服务器上工作

当我的脚本将远程文件存储到本地目录中时,我使用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

你为什么叫Perl脚本刚刚得到的文件大小? PHP可以为你做这件事,你不需要那里的'exec'。 – Konerak 2011-05-16 06:54:11

+0

@ Konerak - 你怎么做到的? – Maxime 2011-05-16 06:59:48

+0

@ Mario - 这不是上传,我使用cURL下载远程文件。 – Maxime 2011-05-16 07:01:35

回答

2

如果你需要文件大小,你也可以直接调用PHP的filesize函数,并避免必须使用perl。

+0

我已经测试过这个功能,它只在文件被完全下载时打印大小,所以我不能'看到进展,但是要感谢任何方式...... – Maxime 2011-05-16 06:59:06

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 { 
     ... 
     ... 
    } 
} 
?> 
+0

是的我确定文件存在,因为它完全下载我将它转换成不同的格式。我很确定我已经测试过filesize(),它只在文件完全下载时打印大小,而这不是我需要查看进度的。 – Maxime 2011-05-16 07:05:31

+0

@Maxime对不起,这不是问题。我会评论你的问题,因为我会删除这个答案。 – AndersTornkvist 2011-05-16 07:36:10

相关问题