如何解决PhP 5.4中的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
希望这可以帮助您找出问题所在。
解决方法
我一开始就对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文件上传进度栏,所以我想知道是否丢失了一些东西。一旦我在上传中获得一个状态点,我就可以完成其余的工作。
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。