2013-05-04 3 views
2

Я пишу сценарий, в котором неуказанное количество файлов должно быть загружено через запросы cURL удаленному API. Тем не менее, этот скрипт висит и в конечном итоге истекает. Как ни странно, все запросы успешны (файлы успешно загружены), но сценарий не может продолжаться. Вот петля:Использование cURL в цикле

foreach ($paths as $path) { 
    $ch = curl_init($path); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-Auth-Token: '.$token, 'Content-Length: '.filesize($path)); 
    curl_setopt($ch, CURLOPT_PUT, true); 
    curl_setopt($ch, CURLOPT_INFILE, fopen($path, 'r')); 
    curl_setopt($ch, CURLOPT_INFILESIZE, filesize($path)); 
    echo curl_exec($ch); 
} 

Я считаю, что это как-то связано с циклом. Я попытался добавить curl_close в цикл, но это не решает проблему. Есть идеи?

+0

'все запросы successful' ** и **' но сценарий не может continue' вместе, вероятно, невозможно (единственный шанс - это то, что сценарии сталкиваются с проблемой после успешной загрузки последнего изображения) – hek2mgl

+0

Я знаю, что это странно, но файлы появляются в целевом каталоге. Я не уверен, что сказать ... –

ответ

3

поставил timeout в CURL

foreach ($paths as $path) { 
    $ch = curl_init($path); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-Auth-Token: '.$token, 'Content-Length: '.filesize($path)); 
    curl_setopt($ch, CURLOPT_PUT, true); 
    curl_setopt($ch, CURLOPT_INFILE, fopen($path, 'r')); 
    curl_setopt($ch, CURLOPT_INFILESIZE, filesize($path)); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 400); //timeout in seconds 
    echo curl_exec($ch); 
} 
+1

Спасибо! Добавив тайм-аут, я наконец смог увидеть некоторые ошибки, которые я легко разрешил. Тогда я смог удалить тайм-аут, и все отлично работает! Я просто не был уверен, что лучший способ устранить эту проблему - тайм-аут - это трюк. –

+0

@ Давид Рад, это помогло ... :) –

-1

индивидуальный локон из цикла с вызовом функции, как показано ниже

foreach ($paths as $path) { 
call_curl($path); 
} 


function call_curl($path){ 
    $ch = curl_init($path); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-Auth-Token: '.$token, 'Content-Length: '.filesize($path)); 
    curl_setopt($ch, CURLOPT_PUT, true); 
    curl_setopt($ch, CURLOPT_INFILE, fopen($path, 'r')); 
    curl_setopt($ch, CURLOPT_INFILESIZE, filesize($path)); 
    echo curl_exec($ch); 
} 
+0

Спасибо. Я сейчас пытаюсь это сделать, но мне любопытно; почему это имеет значение? –

+2

@David Это не имеет никакого значения. –

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