Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP readfile()优化资源使用_Php_Streaming_Video Streaming_Jwplayer_Fread - Fatal编程技术网

如何使用PHP readfile()优化资源使用

如何使用PHP readfile()优化资源使用,php,streaming,video-streaming,jwplayer,fread,Php,Streaming,Video Streaming,Jwplayer,Fread,我正在使用一个php脚本向JWPlayer提供文件,以防止leeches获取URL并在他们的iPhone和Roku应用程序中使用它。所以我调用videoplay.php?id=myfile。输出为mp4视频流。文件通常为200-500字节 php脚本工作正常,经过一些调整,它的性能甚至比我的初始版本要好得多。但它是一个资源猪。当我对一个文件进行流式传输时,我无法在浏览器中打开另一个窗口来访问同一网站上的任何页面……我甚至无法显示当前页面的源。如果我通过将url直接提供给播放器来播放完全相同的视频

我正在使用一个php脚本向JWPlayer提供文件,以防止leeches获取URL并在他们的iPhone和Roku应用程序中使用它。所以我调用videoplay.php?id=myfile。输出为mp4视频流。文件通常为200-500字节

php脚本工作正常,经过一些调整,它的性能甚至比我的初始版本要好得多。但它是一个资源猪。当我对一个文件进行流式传输时,我无法在浏览器中打开另一个窗口来访问同一网站上的任何页面……我甚至无法显示当前页面的源。如果我通过将url直接提供给播放器来播放完全相同的视频文件,我就没有资源占用问题,而且我可以在播放视频时查看页面的来源,并在同一浏览器(在两个不同的页面上)中同时播放来自同一网站的两个视频

这是我的密码

// some code to query database and get the file url
//
$fh = fopen($filename, "rb") or die("Could not open movie\n");

while (!feof($fh) && connection_status() == 0)
{
  print(fread($fh, 1024*8));
  flush();
  ob_flush();
  usleep(10000);
}

fclose($fh);
我添加usleep是为了限制资源使用,但它不起作用,但视频加载速度似乎更快。当我让usleep长得多(例如1/10秒)时,视频加载所需的时间就长得多。如果我在1024*4和1024*16之间改变块大小,8kbyte似乎会导致视频加载速度最快。16kbyte使用了更多的资源,似乎最大限度地利用了我的25MBit连接。视频根本不会从我的本地服务器加载(但我们的云服务器上的远程视频会加载)。将块大小减少到1KB并不能解决资源问题


我做错了什么?

这可能是因为您没有使用
会话写入关闭()。将函数调用添加到流的开始。会话锁可能是脚本运行的原因,因为脚本正在等待彼此完成后才能继续

该页面是否使用会话?可能是会话锁定问题,在加载站点上的任何其他页面时,您无法加载该页面。是,它使用会话。我会试着把它关上。好的,行了。但是如果我调用session\u write\u close(),那么我无法添加或更新任何变量,对吗?是的,在调用
session\u write\u close()
之后,任何
$\u session
更改都不会被保存。