我正在创建文件上传进度条,但我无法让它正常工作。相关代码如下。
关联表单HTML
<form action="" method="post" id="uploadForm" enctype="multipart/form-data">
<div id="uploadFields">
<?php
$val = time();
echo '<input type="hidden" class="progress" name="'.ini_get('session.upload_progress.name').'" value="'.$val.'" required />";
?>
<label>Select file to upload:</label>
<input type="file" name="fileToUpload" id="fileToUpload" required><br><br>
Ajax.js
$(document).ready(function(){
$('#uploadForm').submit(function(){
/***I insert picture to upload page, this responds to my later AJAX request***/
sendRequest();
});
});
function sendRequest() {
var progress = $(".progress").val();
$.ajax({
type: "POST",
url: ajaxurl,
data: {
PHP_SESSION_UPLOAD_PROGRESS: progress,
action: "uploadProgress"
},
success:function(result){
console.log(result);
handleResponse(result);
}
});
}
function handleResponse(result) {
if (result < 100) {
$("#loading-gif").css("left", result + "%");
setTimeout("sendRequest()", 1000);
}
}
PHP进度函数
function uploadProgress(){
$key = ini_get("session.upload_progress.prefix") . $_POST[ini_get("session.upload_progress.name")];
/*** error line ***/ echo print_r($_SESSION[$key]);
if(!empty($_SESSION[$key])) {
$current = $_SESSION[$key]["bytes_processed"];
$total = $_SESSION[$key]["content_length"];
echo $current < $total ? ceil($current / $total * 100) : 100;
}else {
echo 'empty';
}
wp_die();
}
我已经浏览了几十个论坛,阅读了php.net上的手册和说明,尝试了不同形式的尝试使其工作,但它无法正常工作。 具体来说,使用上面的代码,我得到错误日志: PHP注意: *未定义的索引:在第581行的D:***** \ wordpress \ ***** \ functions.php中的upload_progress_146828472 *
&#39; 14682284727&#39;是一个动态值(通过time())来确保没有竞争条件,并且每次上传都是唯一的 - 希望这也应该删除任何缓存问题。我已经回显了表单中给出的时间,以及传递给progress函数的相同变量,以及错误日志,它们完全相同。 我没有通过FastCGI运行PHP。
我在PHP.ini中设置了所有与session_upload_progress相关的指令,重要的是 session.upload_progress.enabled = On , session.upload_progress.cleanup =关闭 ,这应该允许我打印出阵列。 我运行PHP 5.4.5,管理员访问所有文件/文件夹。保留所有其他会话变量,我在页面之间成功使用它们。
我做了一个荒谬的调试,但没有任何进展。我在这一点上陷入困境。 progress函数返回1以打印$ _SESSION数组,并为数组大小返回空。 没有闪存解决方案。我只是想知道我错过了什么,我做错了什么,我能做得更好?
任何想法/建议都会非常感激。
答案 0 :(得分:0)
一个老问题,但也许这会帮助任何遇到同样问题的人进行故障排除。
如果您确定满足使用会话正确执行上载进度的所有要求,则可以通过手动检查会话文件来开始进行故障排除。根据您的服务器配置,其路径会有所不同,您可以使用session_save_path()
进行检查。
如果文件生成正确,您应该使用开发人员的工具手动检查发送的内容和顺序。
同样在您的AJAX调用中,您必须将这两个更改为false:
contentType: false,
processData: false,
的更多信息