2017-04-20 99 views
0

我試圖用file_put_contents從遠程服務器上下載文件。這個腳本通過ajax調用。我遇到的問題是當文件很大時例如腳本超時(500MB)。我得到504網關超時 - nginx的PHP長時間運行的腳本替代?

的download.php $目標= 「/home/mywebsite/public_html/wp-content/channels/videos/test.mp4」;

$link = "http://www.example.com/videos/movie.mp4"; //500mb 
    $result = file_put_contents($destination, fopen($link, 'r')); 

我正在使用專用主機。我已經改變了我的php.ini並確認phpinfo();

max_execution_time 7200 max_input_time 7200 max_input_vars 1000 memory_limit -1 output_buffering 4096 post_max_size 1200M upload_max_filesize 1000M

此腳本保持超時。有沒有另一種解決方案,我該如何解決?當我檢查目錄時,文件已成功下載,但頁面超時。所以我不能通過ajax返回任何數據。

我該如何解決?

+0

而不是我建議你執行wget從php exex –

+0

如果您正在您的服務器上下載文件,它不是服務於該請求中的任何人,首先不需要PHP在那裏。如果您有* NIX –

回答

1

您還應該更改nginx fcgi超時值。 PHP腳本繼續執行,但你的連接nginx和PHP超時。

1

使下載異步。像一個進程只填寫一些數據庫或rabbitMq的下載請求和其他威爾cosume它(也許cron)

+0

,您可以簡單地執行'wget http:// www.example.com/videos/movie.mp4'這對於長時間運行的流程來說是最明智的選擇。它還能很好地防禦DOS攻擊,因爲嘗試只會在數據庫中生成一堆請求條目(您可以通過限制特定用戶同時擁有多少條目來輕鬆阻止),而不是將服務器通過長時間運行的流程充斥着它。 –

+0

cron腳本會超時嗎? – mdnba50

+0

它可能,但你可以通過'ini_set('max_execution_time',0);'在php代碼中沒有任何更改nginx(whitch不是由你維護......只是asuming) –