php 能否检测用户是否已开始上载

WBOY
Release: 2016-06-13 12:54:07
Original
877 people have browsed it

php 能否检测用户是否已开始下载
有个项目提供文件下载,因为需要检测用户是否完成了下载,有下面一段代码

<br />
...<br />
ignore_user_abort(true);<br />
if ($fd = fopen($filePath, 'rb')) {<br />
	session_write_close();<br />
	if ($start_offset > 0)<br />
            fseek($fd, $start_offset);<br />
	while (!feof($fd)) {<br />
	     print (fread($fd, 16384));<br />
	}<br />
<br />
	fclose($fd);<br />
}<br />
if (connection_aborted()){<br />
 ...<br />
}<br />
else {<br />
 ...<br />
}<br />
...
Copy after login


现在出现了一个问题是,如果是大文件,没什么事,如果是小文件,当用户看到选择存储目录对话框稍等一会然后点cancel时,服务器端已将文件全部发送了,所以在做if (connection_aborted())时是false
想问问有没有什么方法,在比如说第一个print后发现用户还没有开始下载则暂停print,或者有没有办法禁止诸如buffering之类的以使在用户没有接受是block这个print,也就是print不能返回?

不知道解释的清不清楚


------解决方案--------------------
PHP没法知道。
------解决方案--------------------
PHP服务端脚本,那是浏览器的行为了,php是有心无力。
------解决方案--------------------
把 if (connection_aborted()){... 放一个在循环内
------解决方案--------------------
服务器发送header,紧接着是文件数据
浏览器接收header后,会立即接收后续的数据。在浏览器解析header的同时,下载已经开始了,只不过下载到缓存里的。
------解决方案--------------------
引用:
python可以吧

底层协议的问题,跟语言无关,如果双方有约定,php也可以的
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!