cURL在存在的文件(远程服务器)上返回404。为什么?

时间:2010-07-19 17:36:19

标签: php curl

我正在检查某些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代码在以下mp3上显示404。您可以在浏览器中找到它们,看看它们是否有效。这些只是许多有这个问题的随机例子:

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 个答案:

答案 0 :(得分:1)

基本上:

@curl_exec($ch);

你正在假设卷曲执行正确,并丢弃其返回值。如果执行查询时出现问题,exec将返回false并且curl_error和curl_errno将包含有关爆炸和如何爆炸的诊断信息。永远不要假设卷曲成功。它失败的原因太多了,但只有一种方法可以成功。至少,将您的代码更改为:

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

看看事情为何死亡。否则你只会留下奇怪的结果而且已经抛弃任何机会看到它们发生的原因。