2012-02-22 33 views
0
私は、XMLデータ形式icecat.bizを取得するには、次のコードを使用しています

CURLサーバーのデータ転送のタイムアウト

set_time_limit (0); 
$login = "Arpan"; 
$password = "arpan"; 
//$url="http://data.icecat.biz/export/freexml.int/EN/files.index.xml"; 
$url= "http://data.icecat.biz/export/level4/EN"; 
//$url="http://data.icecat.biz/export/freexml.int/DE/10.xml"; 

$user_agent = 'Mozilla/5.0 (Windows; U; 
Windows NT 5.1; ru; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9'; 
     $header = array(
     "Accept: text/xml,application/xml,application/xhtml+xml, 
text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5", 
     "Accept-Language: ru-ru,ru;q=0.7,en-us;q=0.5,en;q=0.3", 
     "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7", 
     "Keep-Alive: 300"); 
$local_path = "myxml.xml"; 
$file_handle = fopen($local_path, "w"); 

ob_start(); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_FILE, $file_handle); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
//curl_setopt ($ch , CURLOPT_HTTPHEADER, $header); 
curl_setopt($ch, CURLOPT_USERPWD, $login . ":" . $password); 
curl_setopt($ch, CURLOPT_TIMEOUT, 0); // times out after 4s 
//curl_setopt($c, CURLOPT_TIMEOUT, 2); 
//curl_setopt($ch, CURLOPT_NOBODY, TRUE); // remove body 
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
//$head = curl_exec($ch); 

$result = curl_exec ($ch); 

if(curl_errno($ch)) 
{ 
    echo 'Curl error: ' . curl_error($ch); 
} 

curl_close($ch); 
ob_end_clean(); 
fclose ($file_handle); 



$xmlStr = file_get_contents($local_path); 
$xmlObj = simplexml_load_string($xmlStr); 



print "<pre>"; 
//print_r($xmlObj->Product->ProductRelated->attributes()->ID); 
print_r($xmlObj); 
exit;  
ページは、無制限の時間のために実行されているが、XMLは10に後に更新されていません

20秒。出力xmlも完了していません。私は、ある時間後にサーバーが応答していないか、データが転送されていないと思います。ここで

はエラーメッセージです:

**** The server xml (icecat) size is big 

問題とどのように私はそれを修正すればよいとは何ですか?

+0

メモリが不足している可能性はありますか?何かエラーがありますか? – gintas

答えて

0

正常にダウンロードするのに十分な時間が与えられていないように聞こえます。

//あなたの// curl_setopt($ c、CURLOPT_TIMEOUT、2)のコメントを外します。

タイムアウトを600に設定してテストします。

あなたのリクエストがうまくいけば、サーバーが応答をキャッシュしているかどうかを常に確認することができます。最近見たことは、自分の通常の操作をキャッシュするために、 。いくつかの切り捨てられた応答がキャッシュされていて、それはあなたに関係していないかもしれないが、すべて24時間返されたものです。

+0

@gintas thats良い点です。メモリの制限は実際の可能性があります。ファイルの出力を見つけてログに記録するためには、応答の少なくとも一部を参照する必要があります。応答がちょうどchurningを続けるならば、メモリが枯渇したことをPHPがエラーアウトするので、メモリに関連していない可能性があります。 –

+0

こんにちはH、あなたの応答に感謝します。私は使用しました curl_setopt($ c、CURLOPT_TIMEOUT、0); 「カール実行の無限の時間」を意味すると思います。 実際には無制限の時間の実行が必要です。サーバーのxmlサイズが大きすぎるためです。 問題が残ります...... ありがとうございました – Arpan

+0

"良い点があります。メモリの制限が実際に発生する可能性があります。ファイルの出力を検索してログに記録する必要があります。メモリが使い果たされたというエラーメッセージが表示されるので、応答がちょうどチャーニングを続けるとメモリに関連しないかもしれませんが " コメント: いいえメモリ関連のエラーやカール関連のエラーはありません実行時に発生しています – Arpan