我试图通过JavaScript和PHP实现多文件上传脚本。
我使用session.upload_progress来跟踪进度,当文件完成上传时,我将它从tmp文件夹复制到永久位置并将其注册到数据库中。最后,提交文件的实际脚本将复制并注册剩余文件并完成操作。
所以现在我尝试在服务器端检测连接丢失或用户堕胎(通过xhr.abort)以反转这些更改(由session.upload_progress进行):删除已移动的文件并将其从数据库中删除。 / p>
问题在于,我不知道如何检测松动的连接或堕胎我使用此代码制作一些日志,看看会发生什么,但它什么都不记录:
ignore_user_abort(true);
if(isset($_POST['option'])){
if($_POST['option'] == "picture_upload_form") upload_pictures_form();
elseif($_POST['option'] == "picture_upload"){ // this part is what is important here
if(connection_status() != CONNECTION_NORMAL) {
error_log("connection_status() : " .connection_status());
error_log( print_r($_SESSION, TRUE));
exit();
}
upload_pictures(); // when no problem this function will save the remaining files normally
}
elseif($_POST['option'] == "picture_upload_progress") upload_pictures_progress();
}
此代码处理请求并根据发布的选项调用不同的函数:
修改 出于测试目的,我在php.ini中将值更改为ignore_user_abort = 1,禁用上载进度跟踪(现在发送给服务器的唯一请求是提交的文件)并将以下代码添加到脚本的顶部:
ignore_user_abort(true);
error_log("connection_status() : " .connection_status());
我清除了php_error.log,然后我正常提交文件等待,在上传完成之前我断开服务器与客户端的连接。经过一段时间的思考(我想它是超时延迟)我在日志中找到了这个:connection_status():0
提前谢谢