我尝试检测是否存在流(ogg或mp3文件)。
我想使用get_headers,但我注意到我的托管已禁用此功能。
我可以在htaccess中激活它但由于某些原因它无法正常工作。
无论如何,我决定使用cURL,如果我试图检测网址是否存在,它会起作用:
$curl = curl_init();
curl_setopt_array( $curl, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => 'http://stackoverflow.com' ) );
curl_exec( $curl );
$response_code = curl_getinfo( $curl, CURLINFO_HTTP_CODE );
curl_close( $curl );
echo 'http://stackoverflow.com : response code '.$response_code.'<br />';
if ($response_code == 200)
{
echo 'url exists';
} else {
echo "url doesn't exist";
}
工作正常。我尝试过使用虚假网址,响应代码为0。
我不知道为什么它不适用于我的流,就像这个:
http://locus.creacast.com:9001/StBaume_grotte.ogg
我考虑过服务器问题,但我已经尝试过在网上找到的其他流(比如这个:http://radio.rim952.fr:8000/stream.mp3),我仍然无法获得响应代码。
$curl_2 = curl_init();
curl_setopt_array( $curl_2, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => 'http://locus.creacast.com:9001/StBaume_grotte.ogg' ) );
curl_exec( $curl_2 );
$response_code_2 = curl_getinfo( $curl_2, CURLINFO_HTTP_CODE );
curl_close( $curl_2 );
echo '<br /><br />http://locus.creacast.com:9001/StBaume_grotte.ogg : '.$response_code_2.'<br />';
if ($response_code_2 == 200)
{
echo 'url existe';
} else {
echo "url n'existe pas";
}
所以我想这不是服务器问题,但它与url / file的类型有关。
你知道我能检查什么吗?即使文件存在,我的响应代码也始终为0,并且获取响应代码的速度非常慢。
答案 0 :(得分:1)
您可以尝试使用以下代码来获取响应标头。您可以增加较慢URL的超时,但请记住它也会影响您自己的页面加载。
$options['http'] = array(
'method' => "HEAD",
'follow_location' => 0,
'ignore_errors' => 1,
'timeout' => 0.2
);
$context = stream_context_create($options);
$body = file_get_contents($url, NULL, $context);
if (!empty($http_response_header))
{
//var_dump($http_response_header);
//to see what tou get back for usefull help
if (substr_count($http_response_header[0], ' 404')>0)
echo 'not found'
}
更新:
我注意到问题在于身体。即使使用HEAD请求,它看起来也会尝试下载所有内容。所以我将请求更改为一个简单的fopen
,它可以工作。
<?php
$url = 'http://radio.rim952.fr:8000/stream.mp3';
// Try and open the remote stream
if (!$stream = @fopen($url, 'r')) {
// If opening failed, inform the client we have no content
if (!empty($http_response_header))
{
var_dump($http_response_header);
}
exit('Unable to open remote stream');
}
echo 'file exists';
?>
我使用了rim952 url进行了测试,因为另一个甚至不再在Firefox中加载了。我通过将请求更改为stream.mp3xx进行测试,以生成几乎立即生成的404。