PHP get_headers导致白屏死机

时间:2011-03-13 10:27:38

标签: php video-streaming get-headers

我正在尝试测试是否在我的页面上存在.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中硬编码的内容。实际上,这将是我的计算机的公共IP地址,从VLC播放器流式传输视频,但是对于这个演示,我已经将其替换为12.34 ......等。

我得到的问题是这个功能似乎导致死亡错误的白页,让我不知道什么是错的。甚至在我的日志文件中都没有。我想真的有两个问题,

  1. 我的功能有问题吗? get_headers不接受I / P地址 那样的?
  2. 无论如何我还有更好的方法吗?
  3. 提前致谢!

    更新:13-3-11 11:03(格林威治标准时间) - 如果.flv流正好在那里页面加载正常,如果.flv流丢失,get_headers会导致白屏死机,即使启用了所有错误报告,也不会在日志中。

3 个答案:

答案 0 :(得分:1)

当您致电get_headers($url)时,它会对提供的网址执行GET查询,然后返回收到的标头。对于普通文档(如页面,图像等),它可以快速执行。 当您请求视频流时,它会尝试接收所有文档,但不能因为超时或类似内容而中断。

尝试使用Curl(由@sexyprout推荐)但使用HEAD请求而不是GET - 它只检索没有响应内容的标头:

curl_setopt($ch, CURLOPT_NOBODY, 1);

答案 1 :(得分:0)

尝试在没有@之前调用此函数 - 你会看到什么是错的。

答案 2 :(得分: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);