2013-10-06 24 views
1

我有一個腳本,從CSV文件導入到網上商店的產品。有大約20,000件項目需要進口,因此整個過程可能需要30-60分鐘。或更多時間。腳本可以由用戶使用webbrowser或CRON作業手動啓動。在這兩種情況下,我都想使用相同版本的腳本。新項目(或更新的項目)的導入將每週進行一次。通過腳本運行長效任務。如何避免500錯誤?

我的問題是服務器在5分鐘後殺死腳本。工作

的我設置:

ini_set('max_execution_time' ,0);  
ini_set('set_memory_limit', -1) 

我意識到,我不得不進口的也只是一堆物品在單次運行,例如500個項目。在每次運行結束時,我將把導入狀態保存到數據庫中 - 例如。項目0-500被導入,所以下次腳本應該導入500-1000。

我不知道該怎麼做。導入一堆物品後我需要做什麼?也許我應該做一個GET狀態參數重定向如:

header('Location: http://www.example.com/importer/import.php?package=4'); 
exit; 

這是一個很好的方法做到這一點嗎?將這樣的工作與cron?

回答

1
session_start(); 

// This function should take care of importing 
// If $limit is null it should import whole csv file 
function importProcess($offset, $limit = null) { 
    // some magic here 
} 

echo "Importing process in progress..."; 

// Script is called from command line 
if (php_sapi_name() === 'cli') { 
    importProcess(0, null); 
} else { 
    $num = 500; 
    $offset = isset($_SESSION['offset']) ? (int) $_SESSION['offset'] : 0; 

    if (importProcess($offset, $num)) { 
     $_SESSION['offset'] = $offset+$num; 
     header('Location: http://www.example.com/importer/import.php'); 
    } else { 
     echo "Done"; 
    } 
} 
+0

您的意思是說,當CRON調用腳本時,長時間運行沒有問題嗎? –

+0

是的,如果你從CLI調用腳本,那麼長時間運行應該不會有問題。 – ofca

+0

這很愚蠢。我實現了這一點,我得到504超時錯誤。 –