PHP会话.upload_progress没有';t在Linux/cPanel/Apache环境中工作(在Wind


PHP session.upload_progress Doesn't Work in a Linux/cPanel/Apache Environment (worked in Windows)

很抱歉再问一个关于PHP中的会话upload_progress freture的问题,但它让我很困惑。我在Windows服务器上开发了一个原型文件上传工具,进度功能运行得很好。但当我把原型移到我们的Linux服务器上时,它没有工作。进度数组从未出现在$_SESSION超级全局中,尽管文件传输没有问题。

这是环境:

  • Apache版本:2.2
  • PHP版本:5.4.31
  • 服务器API:Apache 2.0处理程序(不是CGI!)

以下是会话变量:

  • session.upload_progress.cleanup:关闭(关闭,以便我可以在传输后检查$_session)
  • session.upload_progress.enabled:打开
  • session.upload_progress.freq:1000
  • session.upload_progress.min_freq:1
  • session.upload_progress.name:PHP_session_upload_progress
  • session.upload_progress.prefix:upload_progress_

以下是我的核心文件传输设置:

  • post_max_size:0
  • upload_max_filesize:0
  • 最大输入时间:-1
  • 最大执行时间:-1
  • 输出缓冲:4096

(我将output_braining参数设置为与上传进度所在的Windows服务器上的设置相匹配。最初,它在Linux服务器上"没有值")。

这是设置表单的HTML:

<form name="UploadForm" id="UploadForm" method="post" enctype="multipart/form-data">
<input type="hidden" name="<?php echo ini_get('session.upload_progress.name');?>" id="<?php echo ini_get('session.upload_progress.name');?>" value="1" />
Enter a note to be sent along with your file:<br />
<textarea name="UploadNote" id="UploadNote" rows="5" cols="50"></textarea><br /><br />
<div style="border: thin solid black; padding: 10px;">
Choose the file you wish to transfer and then click the "Upload" button.
<input type="file" name="UploadFile" id="UploadFile" />
<br /><br /><input type="button" id="SubButton" value="Upload" onclick="submit_form('SU')" />

检索上传文件的PHP程序在一个隐藏的iframe中启动。状态检查程序通过jQuery/Ajax每1.5秒调用一次。

正如我所说,upload_progress代码在Windows服务器上工作,并被原封不动地移到Linux服务器上。我后来检查了一些东西:

  • 会话完整性良好。我在主程序(设置表单)中添加了自己的会话变量,并能够在状态程序和上传程序(在iframe中运行)中检索它。会话ID都是相同的
  • 除了我的$_SESSION项目之外,没有任何内容被添加到$_SESSION
  • 同样,文件传输本身运行良好
  • 其他一些SO帖子指出了Apache对POST数据的缓冲可能存在的问题,因此PHP只有在文件完全上传时才会接收到该文件。这会导致上传进度数组永远不会发布在$_SESSION中吗?我读到mod安全性可以插入POST数据的传输中。所以我暂时禁用了Apache虚拟主机中的mod安全,但不幸的是,这并没有起到任何作用

我不得不认为,作为标准cPanel Apache构建的一部分,有一些模块正在影响session.upload_progress功能的操作。有人对尝试什么有什么建议吗?非常感谢。

我知道这是一个旧线程,但我将把它留给遇到同样问题的其他人。这确实是mod_security干扰了会话上传。SecRequestBodyAccess需要设置为Off,会话上传才能工作。原因是SecRequestBodyAccess缓冲页面输出,以便mod_security可以处理页面。

国防部安全文档SecRequestBodyAccess