PhP 5.4中的PhP上传进度无效。 会话变量未设置
我一开始就遇到PhP文件上传进度监视器的问题。
首先,以下是相关的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_
这是表格(简化):
我有JQUERY Ajax代码,在同一个PhP文件中(当然,作为JS脚本),如:
$('#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数组中上传状态的符号(无变量/索引)! 文件上传。 我确保文件足够大,以便5000毫秒足以报告一些中间状态。
我之前从未实现过PhP文件上传进度条,所以我想知道我是否遗漏了一些东西。 一旦我在上传中获得一个状态点,我将能够完成剩下的工作。
谢谢
可能存在一些问题,我已经列出了一些问题。
- 必须禁用Web服务器的请求缓冲才能使其正常工作,否则PHP只能在完全上载后才能看到文件上载。
- 当您的Web服务器通过FastCGI运行PHP时,此function不起作用。
- 不要忘记,在生成表单之前必须初始化会话,否则您将不会在会话中获得任何信息。
- 它不适用于PHP 5.3或更早版本。
- 请注意,如果您运行该代码并打印出$ _SESSSION [$ key]的内容,则会得到一个空数组,因为默认情况下session.upload_progress.cleanup处于打开状态,并且只要所有POST数据都已清除就会清除进度信息读。 将其设置为Off或0以查看$ _SESSION [$ key]的内容。
这可以帮助您跟踪进度条http://pecl.php.net/package/uploadprogress
我希望这能帮助你解决问题。