cURL возвращает 404 для файла, который существует (удаленный сервер).Зачем? - PullRequest
0 голосов
/ 19 июля 2010

Я проверяю, существуют ли определенные mp3. Хотя иногда проблем нет, некоторые действительные mp3-файлы показаны как 404, но не найдены. Вот код, который я использую:

$ch = @curl_init($file_path);
@curl_setopt($ch, CURLOPT_HEADER, true);
@curl_setopt($ch, CURLOPT_NOBODY, true);
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
@curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

@curl_exec($ch);
$header = curl_getinfo($ch);
curl_close($ch);
echo "<pre>";
print_r($header);
echo "<pre>";

Я думал, что проблема была в том, что сайты использовали перенаправления, но установка значения CURLOPT_FOLLOWLOCATION в TRUE не решила проблему.

http-код показывает 404 в следующих mp3-файлах. Вы можете перейти к ним в вашем браузере и увидеть, что они работают. Это всего лишь несколько случайных примеров из многих, у которых есть эта проблема:

http://audio.arjlover.net/audio/pesni/Babies_go_series/Babies%20Go%20Beatles/01%20Hey%20Jude%20Beatles.mp3

http://www.dagatinha.com.br/musicas/Lady%20Gaga%20%20-%20Just%20Dance.mp3

1 Ответ

1 голос
/ 20 июля 2010

В основном:

@curl_exec($ch);

Вы предполагаете, что curl exec'd правильно, и выбрасываете его возвращаемое значение.Если при выполнении запроса возникла проблема, exec возвращает false и curl_error, а curl_errno будет содержать диагностическую информацию о том, что и как произошло.Никогда не предполагайте, что завиток удался.Слишком много причин для провала, но только один путь к успеху.Как минимум, измените свой код на:

if (curl_exec($ch) === FALSE) {
    die("Curl error: " . curl_error($ch));
}

, чтобы понять, почему все погибло.В противном случае вы просто получите странные результаты и упустите шанс увидеть, почему они произошли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...