php如何检测多文件上传时的中止或连接丢失

时间:2016-08-19 00:50:28

标签: javascript php multifile-uploader

我试图通过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();
    }

此代码处理请求并根据发布的选项调用不同的函数:

  1. option = picture_upload_form:将向客户端发送上传内容 用户可以选择文件的形式
  2. option = picture_upload_progress:将返回(回显)上传 进展状态
  3. option = picture_upload:这是什么时候会被调用的 提交文件。如果没有问题,它应该正确处理剩余的文件或删除那些已经处理过的文件(通过session.upload_progress)如果有超时或堕胎(它正确地执行了第一部分而不是第二部分,当我中止或断开服务器时我没有记录)。
  4. 修改 出于测试目的,我在php.ini中将值更改为ignore_user_abort = 1,禁用上载进度跟踪(现在发送给服务器的唯一请求是提交的文件)并将以下代码添加到脚本的顶部:

    ignore_user_abort(true);
    error_log("connection_status() : " .connection_status());
    

    我清除了php_error.log,然后我正常提交文件等待,在上传完成之前我断开服务器与客户端的连接。经过一段时间的思考(我想它是超时延迟)我在日志中找到了这个:connection_status():0

    提前谢谢

0 个答案:

没有答案