2017-06-05 102 views
1

我試圖使用基於PHPExcel的Maatwebsite/laravel-excel庫在Laravel 5.4中將excel文件導入到我的MySQL數據庫。將excel文件導入數據庫時​​出現超時

我需要導入的文件非常大:至少有50行100列,我需要爲每行創建一個數據庫條目。

我想我可能有一些問題的導入過程,所以我甚至在1塊我收到以下錯誤消息,開始了與使用大塊,但是:180秒超過

最長執行時間。

我試圖增加max_execution_time變量和內存限制,但我似乎仍然無法通過導入。

這是我使用的代碼:我的方式在我的家園環境進行本地測試,這

Excel::filter('chunk')->load($request->file('source_file')->getRealPath())->chunk(1,function ($results) { 
    foreach($results as $row) { 
     TaskMeta::create([ 
     'task_id' => $row['task_id'], 
     'col2' => $row['column2'], 
     ... etc, rest of the 100 columns ommited for clarity 
     ]); 
    } 
}); 

。我需要一個可以在生產服務器上工作的解決方案。

+0

如何運行此命令:從控制檯或通過Web服務器?你什麼時候爲cli或apache更改'max_execution_time'?謝謝。 –

+0

我在我的apache服務器的php.ini文件中更改了max_execution_time。我不想再增加它 - 我需要模擬一個生產環境以確保它能夠正常工作。 – PeterInvincible

+0

而你不想在php.ini中更改生產環境中的任何設置。我對嗎? –

回答

0

如果要禁用超時只爲這個腳本使用:

set_time_limit(0) 

...和監控流程,以確保它不掛。甚至可以把它放到命令中,並使用$ this-> info()輸出每次迭代的行號,以便知道它在文件中的位置。

這樣,您覆蓋任何的.ini的配置可以抱着你回來:)

http://php.net/manual/en/function.set-time-limit.php

相關問題