2012-02-22 5 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 это хороший момент. Ограничение памяти может быть реальной возможностью, нам может потребоваться также увидеть хотя бы часть ответа на поиск и вывод файла журнала. Хотя, если ответ просто продолжает падать, это может быть не связано с памятью, так как php будет ошибочно заявлять, что память была исчерпана. –

+0

Привет, H, спасибо за ваш ответ. Я использовал curl_setopt ($ c, CURLOPT_TIMEOUT, 0); Я думаю, что это означает «неограниченное время выполнения завитка». На самом деле мне нужно неограниченное время исполнения. Потому что размер xml сервера слишком велик. Проблема остается ... Спасибо – Arpan

+0

«@gintas это хорошая точка. Ограничение памяти может быть реальной возможностью, нам может потребоваться также увидеть хотя бы часть ответа на поиск и вывод файла журнала. Хотя, если ответ просто продолжает вспениваться, он может не быть связан с памятью, так как php будет ошибочно заявлять, что память была исчерпана » Комментарий: Нет ошибки, связанной с ошибкой или завиванием памяти. Я получаю во время выполнения – Arpan

Смежные вопросы