2

ストリーム (ogg または mp3 ファイル) が存在するかどうかを検出しようとします。

get_headers を使用したかったのですが、私のホスティングではこの機能が無効になっていることに気付きました。

htaccess で有効化できますが、何らかの理由で正しく機能しません。

とにかく、私はcURLを使用することに決めました.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 です。

4

1 に答える 1

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でテストしたのは、もう一方のURLがFirefoxでロードされなくなったためです。リクエストをstream.mp3xxに変更して、ほぼ瞬時に来る404を生成することでテストしました。

于 2013-03-12T13:12:10.183 に答える