2011-05-16 125 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

相關問題