0

flowplayer を表示するかどうかを決定する前に、自分のページに .flv ビデオ ストリームが存在するかどうかをテストしようとしています。ファイルヘッダーを見て、それが見つかったかどうかを確認してみようと思いました(これが実際に機能するかどうかはわかりません)...次の関数を使用します:

function StreamRunning(){

    $file_headers = @get_headers('http://12.34.56.789:1234/stream.flv');
    if($file_headers[0] == 'HTTP/1.1 404 Not Found') {   // HTTP/1.1 200 OK
        return false;
    }
    else {
        return true;
    }

}

テストするために、ストリームの URL にハードコーディングしました。実際には、これは VLC プレーヤーからビデオをストリーミングするコンピューターのパブリック IP アドレスになりますが、このデモでは 12.34 などに置き換えました。

私が得ている問題は、この関数が死の白ページエラーを引き起こしているようで、何が問題なのか手がかりが得られないことです。私のログファイルには何もありません。実際には2つの質問があると思いますが、

  1. 私の機能に何か問題がありますか?get_headers はそのような I/P アドレスを受け入れませんか?
  2. とにかくこれを行うべきより良い方法はありますか?

前もって感謝します!

更新: 13-3-11 11:03 (GMT) - .flv ストリームが実際にそこにある場合、ページは正常に読み込まれます。ログで。

4

3 に答える 3

1

呼び出すget_headers($url)と、提供された URL に対して GET クエリを実行し、受信したヘッダーを返します。プレーンなドキュメント (ページ、画像など) の場合、高速に実行されます。ビデオ ストリームを要求すると、すべてのドキュメントを受信しようとしますが、タイムアウトなどによって中断されるため、受信できません。

(@sexyprout が推奨するように) Curl を使用してみてください。ただし、GET の代わりに HEAD 要求を使用してください。応答の内容を含まないヘッダーのみを取得します。

curl_setopt($ch, CURLOPT_NOBODY, 1);
于 2011-03-13T11:32:51.423 に答える
0

@ を付けずにこの関数を呼び出してみてください。何が問題なのかがわかります。

于 2011-03-13T10:31:52.560 に答える
0

たぶん、この代替方法が機能する可能性があります:

$ch = curl_init('http://12.34.56.789:1234/stream.flv');
curl_setopt($ch, CURLOPT_HEADER, 1);
$c = curl_exec($ch);

echo curl_getinfo($ch, CURLINFO_HTTP_CODE);
于 2011-03-13T10:33:37.620 に答える