> 백엔드 개발 > PHP 튜토리얼 > php 能否检测用户是否已开始上载

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

WBOY
풀어 주다: 2016-06-13 12:54:07
원래의
933명이 탐색했습니다.

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 />
...
로그인 후 복사


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

不知道解释的清不清楚


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

底层协议的问题,跟语言无关,如果双方有约定,php也可以的
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿