По какой-то причине код ниже, когда я повторяю некоторые URL-адреса, curl_exec никогда ничего не возвращает. Я проверял, что URL-адреса, которые он получает, верны. Я проверил их вручную, чтобы узнать, есть ли выход. Я попытался удалить CURLOPT_RETURNTRANSFER, и curl_exec вернет true. Я не уверен, почему curl_exec не возвращает данные, которые мне нужны.
function _curl_get($urls) { $html_str = ''; foreach ($urls as $url) { $curl_handle=curl_init(); curl_setopt($curl_handle, CURLOPT_URL, $url); curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); $html_str .= curl_exec($curl_handle); curl_close($curl_handle); } return $html_str; }
Проверьте наличие ошибок:
$data = curl_exec($curl_handle); if ($data === FALSE) { die(curl_error($curl_handle)); } else { $html_str .= $data; }
Никогда не предполагайте, что операция, зависящая от внешнего ресурса, преуспела. Есть только один способ, которым все может пойти правильно, и буквально сотни / тысячи способов для того, чтобы все пошло не так. Предполагая, что случайный случай 1: 100 или 1: 1000 – плохой путь.
При небольшой заметке об эффективности нет необходимости многократно создавать экземпляр / закрывать объект завитки. Вы можете повторно использовать его для нескольких URL-адресов. Тем более, что все они приносят то же самое. Создайте один ручок для завивки вне цикла, повторно используйте его повторно внутри цикла (каждый раз задайте URL-адрес), затем закройте его после завершения цикла.