当前位置: 首页 > 面试题库 >

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

欧阳安晏
2023-03-14
问题内容

我一开始就对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文件上传进度栏,所以我想知道是否丢失了一些东西。一旦我在上传中获得一个状态点,我就可以完成其余的工作。

谢谢


问题答案:

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

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

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

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



 类似资料:
  • 我是使用会话变量的新手,尽管我在网上搜索了解会话变量,但我一直在苦苦挣扎。 所以基本上我有一个页面(search.php)。我加载一个基于搜索表单的动态数据表。加载表后,我通过AJAX执行以下操作: 正如您在Success和单击table row记录时所看到的,我的想法是通过AJAX发布一个变量以供以后使用。并将用户重定向到update.php页面。 然后,我希望使用发布的AJAX变量在sessi

  • 问题内容: 是否可以使用Javascript设置PHP会话变量? 问题答案: 在JavaScript中: 在session_write.php文件中: 在HTML中:

  • 问题内容: 我正在使用Valums文件上传器通过带有进度栏的网页进行文件上传。几乎所有内容都可以正常运行,但是我无法更改默认的tmp目录,该目录 在 上传 期间 存储文件。 文件应存储在目录中,而不要存储在默认系统目录中,因为它安装在大小限制为4 MB的RAM磁盘中,并且用户将上传大约10 MB的文件。 我搜索了很多网页,但是没有一种解决方案有效。我在中设置了临时目录: 我已经为目录设置了权限,并

  • 问题内容: 我有一个使用AJAX加载新php文件并更新显示的单页网站。 我从主页开始php会话,但是当我使用ajax更新内部html时,我需要这些会话变量来加载新的php文件。 这篇文章与此类似:PHP会话变量未保留。但是我检查了一下,我的php.ini有 主页PHP: 在用户输入之后,我使用ajax调用php文件并加载页面的一个小节: 有人可以告诉我我缺少哪些重要步骤吗?谢谢。 更新: 在主页和

  • 我想设置会话点击链接,所以登录后,用户将重定向到上次访问的页面。 例如: 步骤1:用户打开主页。(seesion url设置为主页 第二步:下一步在新选项卡中,用户将打开联系人页面(再次会话变量重置) 第三步:用户进入首页,点击登录链接。(因为没有重新加载页面,所以没有设置会话) 第四步:登录后,用户将重定向到联系人页面。 但这里我想要用户被重定向到用户点击链接登录的地方。 我试着用下面的代码,但

  • 你好,朋友,一个新手问题。我是编程新手,所以请温柔一点。 我试图使用JavaScript发布多个会话变量,这样我就可以在以后的PHP中的多个地方使用它们。 我的index.php文件 我的vals.js文件 我的session.php档案 我知道代码很乱,但我不知道如何编写正确的语法。我实际上试图修改一个变量代码,但失败了。因此需要帮助。 其思想是将从各种JavaScript函数派生的各种值发布到