2011-11-15 151 views
0

我試圖修改導入60秒後超時的csv導入函數。對於每一行都有被調整大小的圖像並執行一些其他代碼。導入csv超時問題

我知道vps可以處理這個,但批量,因爲我有另一個網站在同一臺服務器上運行一個不同的csv程序,但做同樣的事情。該程序可以導入8000行並調整圖像大小。那裏的設置是:處理10行並等待3秒,重複。

設置我提出:

  • 的set_time_limit
  • 的max_execution_time
  • 瀏覽器的HTTP保持活動超時

我已經試過睡眠(),每10日線,但這只是使工藝進口較少生產線

if((($current_line % 10) == 0) && ($current_line != 0)) 
{ 
    sleep(3); 
} 

這是腳本如何遍歷文件

for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, Tools::getValue('separator')); $current_line++) 
{ 
//code here 
} 

服務器:

  • 阿帕奇
  • PHP 5.3.3
  • MYSQL
  • 光油緩存

我能做些什麼來完成這項工作?

+0

請更新您的問題,並添加更多關於您嘗試從命令行運行腳本的詳細信息。 –

回答

1

腳本超時時嘗試的第一件事是使用php-cli運行它。對通過命令行運行的腳本沒有執行時間限制。

如果這不能解決您的問題,那麼您知道這不是執行時間限制。

第二件事是嘗試打印常規狀態消息,包括從memory_get_usage(),以便您可以消除內存泄漏作爲腳本崩潰的原因。這可以幫助您確定您的腳本是否在某些輸入中死亡。

+0

我在memory_get_usage()的每一行上做了一個file_put_contents(),用法介於8.25mb到8.75mb之間。 我無法做命令行導入我試圖在2小時後放棄 – Ivar

0

您可以覆蓋默認的超時時間。 set_time_limit(0);

使用睡眠會使它輸入更少的行,基本上腳本超時,因爲它超過60秒。通過增加睡眠,它在60秒內完成得更少。

如果這是一個關鍵腳本,我會考慮將它移動到另一種可以更快執行此操作的編程語言。如果它只是一個關閉,或不關鍵任務嘗試set_time_limit(0),這使它永遠不會超時。也可以嘗試在瀏覽器中輸入php scriptname以在命令行中運行腳本。

0

嘗試向瀏覽器輸出內容以保持瀏覽器活着。如果不活動FF爲3分鐘,IE會在1分鐘後超時。

<? 
if((($current_line % 10) == 0) && ($current_line != 0)) 
{ 
    sleep(3); 
    echo '. '; 
} 
?>