php断点-PHP中的断点续传有哪些

Content-Range:响应资源的范围。 可以在多个请求中标记请求的资源范围。 当连接断开并重新连接时,客户端仅请求未下载的部分资源,而不是重新请求整个资源。 基于这个原理php断点,迅雷采用多线程分段读取网络上的资源,最后进行合并。 后面会讲到利用PHP中的多线程实现断点续传。 本文只实现了一个简单的断点续传。

$file = $_GET['video'];
$size = filesize($file);
$size2 = $size-1;
$range = 0;
if(isset($_SERVER['HTTP_RANGE'])) { //http_range表示请求一个实体/文件的一个部分,用这个实现多线程下载和断点续传!
 header('HTTP /1.1 206 Partial Content');
 $range = str_replace('=','-',$_SERVER['HTTP_RANGE']);
 $range = explode('-',$range);
 $range = trim($range[1]);
 header('Content-Length:'.$size);
 header('Content-Range: bytes '.$range.'-'.$size2.'/'.$size);
} else {
 header('Content-Length:'.$size);
 header('Content-Range: bytes 0-'.$size2.'/'.$size);
}
header("Content-type: video/mp4");
header('Accenpt-Ranges: bytes');
header('application/octet-stream');
header("Cache-control: public");
header("Pragma: public");
// 解决在IE中下载时中文乱码问题
$ua = $_SERVER['HTTP_USER_AGENT'];
if(preg_match('/MSIE/',$ua)) { //表示正在使用 Internet Explorer。
 $ie_filename = str_replace('+','%20',urlencode($file));
 header('Content-Dispositon:attachment; filename='.$ie_filename);
} else {
 header('Content-Dispositon:attachment; filename='.$file);
}
$fp = fopen($file,'rb+');
fseek($fp,$range);    //fseek:在打开的文件中定位,该函数把文件指针从当前位置向前或向后移动到新的位置,新位置从文件头开始以字节数度量。成功则返回 0;否则返回 -1。注意,移动到 EOF 之后的位置不会产生错误。
while(!feof($fp)) {    //feof:检测是否已到达文件末尾 (eof)
 set_time_limit(0);    //控制运行时间
 print(fread($fp,1024));   //读取文件(可安全用于二进制文件,第二个参数:规定要读取的最大字节数)
 ob_flush();      //刷新PHP自身的缓冲区
 flush();      //刷新缓冲区的内容(严格来讲, 这个只有在PHP做为apache的Module(handler或者filter)安装的时候, 才有实际作用. 它是刷新WebServer(可以认为特指apache)的缓冲区.)
}
fclose($fp);

php中set_time_limit()函数的使用

当你的页面数据量很大时,建议使用set_time_limit()来控制运行时间。 默认是30s,所以需要增加执行时间。

php断点_断点_debug断点显示叉

如set_time_limit(800),其中秒数设置为0,表示会继续运行,直到程序结束。 如果想停止运行,只能重启php-fpm(文章旁边附有重启命令)

例如:set_time_limit(0)表示会一直运行到程序结束,但是有些人在window环境下设置这个函数失败,在Linux下可能会出现问题,所以做好添加try catch到逻辑代码以防止异常。

注意:该功能的运行需要您关闭安全模式,并在php.ini中将safe_mode = Off安全模式设置为Off,否则会出现以下错误:

警告:set_time_limit() [function.set-time-limit]:无法在安全模式下设置时间限制

ps:在php.ini中,可以通过定义max_execution_time来设置PHP页面的最大执行时间。

在phpinfo()输出中,可以看到php相关配置。

Loaded Configuration File /etc/php.ini
set_time_limit(800);

该函数指定当前PHP脚本的最大执行时间为800秒,实际上

debug断点显示叉_php断点_断点

最大执行时间 = php.ini 中的 max_execution_time 值 - 当前脚本已执行的时间 + 设置值

如果php.ini中max_execution_time=30,则当前脚本已执行5秒,则:

最大执行时间 = 30-5 + 800 = 825 秒。

查看php运行目录命令:

which php
/usr/bin/php

查看php-fpm进程数:

ps aux | grep -c php-fpm

查看运行内存

断点_php断点_debug断点显示叉

/usr/bin/php -i|grep mem

重新启动 php-fpm

/etc/init.d/php-fpm restart

感谢您的阅读。 以上就是《PHP中的断点续传有哪些》的内容。 学习完这篇文章php断点,相信你对PHP中的断点续传有了更深入的了解。 具体用法需要您在实践中验证。 我是易素云,小编将为您推送更多相关知识点的文章,欢迎关注!