php 能否检测用户是否已开始上载
程序员文章站
2022-04-14 22:05:40
...
php 能否检测用户是否已开始下载
有个项目提供文件下载,因为需要检测用户是否完成了下载,有下面一段代码
现在出现了一个问题是,如果是大文件,没什么事,如果是小文件,当用户看到选择存储目录对话框稍等一会然后点cancel时,服务器端已将文件全部发送了,所以在做if (connection_aborted())时是false
想问问有没有什么方法,在比如说第一个print后发现用户还没有开始下载则暂停print,或者有没有办法禁止诸如buffering之类的以使在用户没有接受是block这个print,也就是print不能返回?
不知道解释的清不清楚
------解决方案--------------------
PHP没法知道。
------解决方案--------------------
PHP服务端脚本,那是浏览器的行为了,php是有心无力。
------解决方案--------------------
把 if (connection_aborted()){... 放一个在循环内
------解决方案--------------------
服务器发送header,紧接着是文件数据
浏览器接收header后,会立即接收后续的数据。在浏览器解析header的同时,下载已经开始了,只不过下载到缓存里的。
------解决方案--------------------
底层协议的问题,跟语言无关,如果双方有约定,php也可以的
有个项目提供文件下载,因为需要检测用户是否完成了下载,有下面一段代码
...
ignore_user_abort(true);
if ($fd = fopen($filePath, 'rb')) {
session_write_close();
if ($start_offset > 0)
fseek($fd, $start_offset);
while (!feof($fd)) {
print (fread($fd, 16384));
}
fclose($fd);
}
if (connection_aborted()){
...
}
else {
...
}
...
现在出现了一个问题是,如果是大文件,没什么事,如果是小文件,当用户看到选择存储目录对话框稍等一会然后点cancel时,服务器端已将文件全部发送了,所以在做if (connection_aborted())时是false
想问问有没有什么方法,在比如说第一个print后发现用户还没有开始下载则暂停print,或者有没有办法禁止诸如buffering之类的以使在用户没有接受是block这个print,也就是print不能返回?
不知道解释的清不清楚
------解决方案--------------------
PHP没法知道。
------解决方案--------------------
PHP服务端脚本,那是浏览器的行为了,php是有心无力。
------解决方案--------------------
把 if (connection_aborted()){... 放一个在循环内
------解决方案--------------------
服务器发送header,紧接着是文件数据
浏览器接收header后,会立即接收后续的数据。在浏览器解析header的同时,下载已经开始了,只不过下载到缓存里的。
------解决方案--------------------
底层协议的问题,跟语言无关,如果双方有约定,php也可以的
相关文章
相关视频
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
上一篇: Python捕获篇之正则表达式
下一篇: 关于input函数使用方法的实例汇总
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论