小编典典

PhP 5.4中的PhP上传进度不起作用。会话变量未设置

ajax

我一开始就对PhP File Upload进度监视器有问题。

首先,以下是相关的PhP.ini设置(指令,本地值和主值):

     session.upload_progress.cleanup    On  On
     session.upload_progress.enabled    On  On
     session.upload_progress.freq   1%  1%
     session.upload_progress.min_freq   1   1
     session.upload_progress.name   PHP_SESSION_UPLOAD_PROGRESS  PHP_SESSION_UPLOAD_PROGRESS
     session.upload_progress.prefix upload_progress_    upload_progress_

这是表格(简体):

     <form id="fileupload" style="position:relative;" target="iframe_fileupload" action="http://www.athiyoga.org/testupload.php" method="POST" enctype="multipart/form-data">
            <input type="hidden" name="<?echo ini_get("session.upload_progress.name");?>" value="first"/>
             <input type="file" name="file_1">
            <button type="submit" >Start Submit</button>
      </form>

我在同一PhP文件(当然,是JS脚本)中有JQUERY Ajax代码,如下所示:

    $('#fileupload').submit(function(event){

    //UPDATED THIS PART after reading: http://stackoverflow.com/questions/19336610/delay-in-populating-session-upload-progress-data
    //POSTING the magic variable PHP_SESSION_UPLOAD_PROGRESS during status inquiry too

       var params = {PHP_SESSION_UPLOAD_PROGRESS:"first", some_var:20 };
       var data_params = jQuery.param( params );
       setTimeout(function(){
              upload_promise = $.ajax({
                url: 'upload_status.php', 
                data: data_params,
                dataType: 'html',
                type    : 'POST',
                cache   : false 
             });
             $.when(upload_promise).done(function(status_response){
                   $('#response_status').html(status_response);
             });
        },5000);
      ...
      ...

upload_status.php只是回显$ _SESSION数组。我还在form-
php中设置了一个测试会话变量,以确保AJAX(通过upload_status.php)选择该会话变量。是的 但是在$
_SESSION数组中不是上载状态的符号(无变量/索引)!文件被上传。我确保文件足够大,以便5000ms足以报告某些中间状态。

我之前从未实现过PhP文件上传进度栏,所以我想知道是否丢失了一些东西。一旦我在上传中获得一个状态点,我就可以完成其余的工作。

谢谢


阅读 192

收藏
2020-07-26

共1个答案

小编典典

可能有一些问题,我只列出了一些问题。

  • 必须禁用Web服务器的请求缓冲才能使其正常工作,否则PHP可能仅在完全上传后才能看到文件上传。
  • 当您的网络服务器通过FastCGI运行PHP时,此功能不起作用。
  • 别忘了,必须在生成表单之前初始化会话,否则您将在会话中没有任何信息。
  • 它不适用于PHP 5.3或更早版本。
  • 请注意,如果您运行该代码并打印出$ _SESSSION [$ key]的内容,则会得到一个空数组,因为session.upload_progress.cleanup默认情况下处于启用状态,并且在清除所有POST数据后便会清除进度信息。读。将其设置为Off或0以查看$ _SESSION [$ key]的内容。

这可以帮助您跟踪进度条http://pecl.php.net/package/uploadprogress

希望这可以帮助您找出问题所在。

2020-07-26