2013-03-12 4 views
2

스트림 (ogg 또는 mp3 파일)이 있는지 여부를 감지하려고합니다.스트림에 대한 HTTP 응답 코드를 읽는 데 문제가 있음 (일반 URL로 작동)

get_headers를 사용하고 싶었지만 내 호스팅에서이 기능을 사용 중지했습니다.

htaccess에서 활성화 할 수 있지만 어떤 이유로 제대로 작동하지 않습니다.

어쨌든, 나는 컬을 사용하기로 결정하고 난이 URL이 존재하는 경우 탐지하려고하면 그것은 작동 : 그것은 잘 작동

$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"; 
     } 

. 나는 거짓 URL로 시도하고 그것이 이것처럼, 내 스트림 작동하지 않는 이유를 모르겠어요 응답 코드는 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/파일 유형과 관련이 있다고 생각합니다.

내가 뭘 확인할 수 있는지 아십니까? 파일이 존재하더라도 응답 코드는 항상 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' 
} 

UPDATE :

내가 문제를 발견은 몸이다. 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로 테스트했습니다. 나는 거의 즉시 오는 404를 생성하기 위해 stream.mp3xx에 대한 요청을 변경하여 테스트했다.

+0

감사합니다. 귀하의 답변에 도움이됩니다. 그래서 솔루션을 사용하려면 "allow_url_fopen"을 활성화해야했습니다. 그 후에는 "스트림을 열지 못했습니다 : 연결 시간이 초과되었습니다"라는 오류가 있습니다. 그래서 지금은 문제가 응답 코드를 가져 오는 데 걸린 시간과 관련이 있다고 생각합니다. 내가 이해할 수없는, 만약 내가 스트림 URL을 열려고하면 연결이 작동하고 빠르지 만 응답 코드를 얻으려고하면 매우 느리고 시간이 있습니다. –

+0

나를 위해 작동하는 솔루션으로 업데이트되었습니다. :) –