2012-01-14 143 views
3

我有一個大文件(2GB),我想用服務器B下載到服務器A.使用PHP下載遠程文件(2GB)

我用PHP試過了FTP和CURL,但沒有成功。它會返回一個TIMEOUT REQUEST錯誤,即使我的set_time_limit()值爲0。

這裏是我的代碼:

<?php 

set_time_limit(0) 

$local_file = 'file.zip'; 
$server_file = '/www/file.zip'; 

$conn_id = ftp_connect("ftp.webmashing.com"); 

$login_result = ftp_login($conn_id, "USERNAME", "PASSWORD"); 

if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) { 
echo "Successfully written to $local_file\n"; 
} else { 
echo "There was a problem\n"; 
} 

ftp_close($conn_id); 

?> 
+1

是'safe_mode'上?另一方面,如果它是那麼大(cronjobs,或者齒輪工人),我會把它委託給非http進程。 – Wrikken 2012-01-14 13:47:59

回答

0

如果您有超時上傳一個文件,你可以看看ftp_pasv()

bool ftp_pasv (resource $ftp_stream , bool $pasv) 

在你的情況,試試這個:

$conn_id = ftp_connect("ftp.webmashing.com"); 

$login_result = ftp_login($conn_id, "USERNAME", "PASSWORD"); 

ftp_pasv($conn_id, true); 
0

當被調用時,set_time_limit()從零重新啓動超時計數器。換句話說,如果超時時間是默認的30秒,腳本執行時間爲25秒,則會執行一次諸如set_time_limit(20)的調用,腳本將在超時之前運行總共45秒。請檢查php.ini中的「max_execution_time」指令

+0

是的,但是set_time_limit(0)完全禁用了超時。 – 2012-01-14 14:43:55

0

如果可以(取決於您的php文件的執行位置),可以將max_execution_time更改爲更長。

現在,我會做什麼,而不是(如果你有權利),就是在命令行中通過php文件調用。命令行會將結果寫入特定的文件中,您只需檢查該文件的內容即可。

一旦結果被寫入(說「0」成功一如既往在Linux),你可以做你想做的。

在前端,一個小Ajax獲得下載的狀態可能是有用的呢!

但一如既往,這取決於是否可以運行shell命令。