我正在使用共享主机(hostgator)。
我有一个网站,视频内容是用php
编写的youtube。
通过指向mp4
文件和html video
标签的直接链接实现。
我想将文件下载(播放)的连接数限制在350个左右。
因为如果连接超过350个,hostgator就会阻止我的网站。
有什么办法吗?
有关如何处理这种情况的任何其他建议也将有所帮助。
答案 0 :(得分:0)
您可以使用处理实际文件下载的php脚本。如果执行了脚本,请增加下载计数器,如果文件已完全发送到客户端,则关闭连接。
要检测文件是否已完全发送,应分小块发送文件,并在每个发送的块之后检查连接是否仍打开。
为此
发送正确的mime类型和http标头
使用ignore_user_abort
使脚本在客户端关闭连接时保持运行状态
分小块发送文件,并在每个块之后检查连接是否仍然有效。 ob_flush
和flush
用于保持输出缓冲区为空。 connection_status
或connection_aborted
测试连接是否仍然打开。
提交整个文件后,减少连接计数器
除此之外,您还可以实现HTTP_RANGE
,以恢复不完整的下载。如果您想在流的中间寻找某个地方,这对于视频下载尤其重要。
在.htaccess
下面,它重写了对PHP文件的所有请求。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^ yourFile.php [L]
</IfModule>
PHP文件下方
// code to increment the counter..
// increment_counter(); ...
// Use the request path (URI) to choose what file to send.
$filename = 'video.mp4';
$size = filesize($filename);
$f = fopen($filename, 'rb');
if (!$f) {
// error...
}
ignore_user_abort(true);
set_time_limit(0);
header("Content-Length: $size");
header("Content-Type: video/mp4");
while (!feof($f)) {
echo fread($f, 8192);
ob_flush();
flush();
if (connection_status() != 0) {
// download aborted... decrement the counter
// decrement_counter(); ...
break;
}
}
fclose($f);
// download completed - decrement counter
// decrement_counter(); ...
此脚本非常简单,但是应该可以给您一个思路。您可以添加更多逻辑(如上面HTTP_RANGE所述)或发送其他标头,但这应该为您提供一个良好的起点。
参考:
下面是鲜为人知的功能文档链接。