2012-11-02 32 views
3

我在運行導入cronjob時遇到了這個奇怪的問題。 它處理一個包含大約400,000個產品的1.5GB XML文件。該腳本工作正常,並將需要幾個小時才能完成,但約500/600秒後,我從cron-deamon得到以下電子郵件。500秒後通過對等方重置連接

PHP的警告:的file_get_contents(http://test.nl/admin/cron_index.php?route=module/EZImport &的cron):未能打開流:HTTP請求失敗! HTTP/1.1 500內部服務器錯誤 在/home/test.nl/public_html/admin/controller/tool/EZImport_cron.php第8行

警告: 的file_get_contents(http://test.nl/admin/cron_index .php?route = module/EZImport & cron): 無法打開流:HTTP請求失敗! HTTP/1.1 500內部 服務器錯誤 /home/test.nl/public_html/admin/controller/tool/EZImport_cron.php 上線8布爾(假)

我的Apache的錯誤日誌說:

[週五11月2日9點43分39秒2012] [警告] [客戶端176.9..174](104)通過對等連接復位:mod_fcgid:從FastCGI的服務器 錯誤讀取數據[週五11月2日9點43分:39 2012] [error] [client 176.9..174]腳本標題過早結束:cron_index.php

這是由的cronjob稱爲cron的文件

 

    require_once('../../config.php'); 
    $opts = array('http' => 
     array('timeout' => 36000) 
    ); 
    $context = stream_context_create($opts); 
    $url = HTTP_SERVER."cron_index.php?route=module/cronMod&cron"; 
    $result = file_get_contents($url, false, $context); 
    var_dump($result); 
    die(); 

我需要運行通過的file_get_contents

這個cron的

環境:

Debian,請 Opencart的

中最長執行時間webmin(php config)設置爲36000秒。

+0

Mod_fcgid(和它的apache2模塊等價物)確實不適合運行這樣的長期任務。儘管您指定'需要'使用'file_get_contents'方法來運行此cron,但您應該考慮將您的cron作業切換爲使用CLI版本的PHP,但不會受到其他SAPI強加的時間限制。 –

回答

0

在腳本中使用set_time_limit(0)嘗試或更改時間限制在php.ini

+0

我將'set_time_limit(0)'添加到索引和通過file_get調用的文件中,php.ini中的時間限制設置爲30秒,因此在webmin中進行的設置否決了 – FlyingNimbus

1

過程一個1.5GB XML文件

ERK,這是一個有點傻 - 你至少需要2次通過驗證文檔格式良好,發生不良事件的可能性很大。

在Webmin(PHP的配置)最大執行時間設定爲36000秒

對於其中結束?

您還需要爲Web服務器和客戶端與服務器之間的鏈中的每個其他組件配置超時,但試圖通過HTTP傳輸1.5Gb文件是愚蠢的 - 您可能會使它工作 - 但它不是解決問題的正確方法。將其分解爲更易於管理的塊。

+0

我不通過HTTP傳輸XML文件,我以50mb zip的形式下載了file_get_contents調用的腳本中的這個文件。另外我使用XMLReader,因此我不會將整個內容加載到RAM中。 – FlyingNimbus

相關問題