gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:42:52 25 4
gpt4 key购买 nike

我一开始就遇到了 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_

这是表格(简化):

     <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>

我有 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 中设置了一个测试 session 变量,以确保 AJAX(通过 upload_status.php)选择该 session 变量。确实如此。但不是 $_SESSION 数组中上传状态的标志(无变量/索引)!文件被上传。我确保文件足够大,以便 5000 毫秒足以报告一些中间状态。

我以前从未实现过 PhP 文件上传进度条,所以我想知道我是否遗漏了什么。一旦我在上传中获得一个状态点,我就可以完成剩下的工作。

谢谢

最佳答案

可能会有一些问题,我列出了其中的几个。

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

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

我希望这能帮助你找出问题。

关于PhP 5.4 中的 PhP 上传进度不起作用。未设置 session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21703081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com