2016-10-11 7 views
0

私はライブストックURLを持っています。これは、SKU番号をこの末尾に追加するURLである34342323232|23232|2323232|232232です。500 foreach内のfile_get_contents()のサーバーエラー

私はMagentoデータベースからすべてのアイテム番号/ Skuを取得し、URLの最後に25 Sku'sを実行し、次にfile_get_contentsを使用してデータを取得するスクリプトを書いています。

URLはチャンクに分割されているため、URLは一度に25件しか処理できません。

これは、foreachループで実行されます。データベースビットは正常に動作し、foreachを数回実行するとスクリプトは500エラーを返すようです。

私はいくつかのことを試しましたが、max_input_varsなどを立てることは役に立たないようです。

これは30分ごとに実行され、1000を実行しているので、URLからデータを取得するには良い方法がありますか?サーバーをクラッシュさせない、より高速な方法?

foreachループコードは以下のとおりです。

$updatedStock = array(); 
    // Split Array in to chunks of 25 
    foreach(array_chunk($productSkus_single, 25) as $sku_chunk) { 

     // Add sku string to live url and get contents 
     $LiveFeedStock = file_get_contents($stockFeedUrl . implode("|", $sku_chunk)); 

     // Turn file contents in to an array and Remove <br/> add to array 
     $updatedStock[] = array_values(array_filter(explode("<br/>",$LiveFeedStock), 'strlen')); 
    } 

残りのコードが必要な場合は、それを提供することができますが、これは失敗するようです。

私はcURLを認識していますが、いくつかの解決策を試しましたが、うまくいくようには見えませんでしたが、もう一度理解していません。

私は既にここにスレッドを通過しており、運のない数多くのソリューションを試しました。

ありがとうございます。

UPDATE

エラーログ表示

mod_fcgid: read data timeout in 40 seconds 
End of script output before headers: index.php 
mod_fcgid: process 18805 graceful kill fail, sending SIGKILL 
+0

'set_time_limit()'が失敗する可能性があります。あなたの関数で 'set_time_limit(0);'を試し、それが役立つかどうか確認してください。 –

+0

ありがとうございました、どこに私はこれを置くのですか?私は自分のコードでset_time_limitを持っていないので。 –

+1

機能の始めに試してみることができます。また、 'file_get_content()'が有効になっていることを確認してください。いくつかのサーバーはセキュリティ上の理由からそれを無効にしています。この場合は 'cURL'を使用してください。 –

答えて

0

私は、次を行うことによって、このエラーを修正は

ProcessLifeTime 7200 
IPCConnectTimeout 30 
IPCCommTimeout 60 
FcgidMaxRequestsPerProcess 10000 
FcgidConnectTimeout 600 
FcgidIOTimeout 10000 

が実行され、今で正常に動作するように変更します。