【发布时间】:2017-03-13 02:41:50
【问题描述】:
我正在创建文件上传进度条,但无法正常工作。相关代码如下。
关联表单 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 注意:*未定义索引:upload_progress_1468284727 in D:*****\wordpress\*****\functions.php on line 581*
“14682284727”是一个动态值(通过 time() 生成)以确保没有竞争条件,因此每次上传都是唯一的 - 希望这也可以消除任何缓存问题。我已经回显了表格中给出的时间,以及传递给进度函数和错误日志的相同变量,它们完全相同。 我没有通过 FastCGI 运行 PHP。
我在 PHP.ini 中设置了所有与 session_upload_progress 相关的指令,重要的是 session.upload_progress.enabled = On,session.upload_progress.cleanup =关闭,这应该允许我打印出数组。 我正在运行 PHP 5.4.5,具有对所有文件/文件夹的管理员访问权限。所有其他会话变量都被保留,我在页面之间成功地使用它们。
我已经对此进行了大量的调试,但没有任何进展。我被困在这一点上。 progress 函数返回 1 以打印 $_SESSION 数组,而返回空数组的大小。 没有基于闪存的解决方案。我只想知道我错过了什么,我做错了什么,我可以做得更好?
任何想法/建议将不胜感激。
【问题讨论】:
-
你能不能把你的输入回显改成@987654324@你写的方式超级不可读,而且容易出现意外的额外引号。它伤害了我的眼睛xD
-
对不起,我完成了同意,我发布了我的最新版本。我尝试了几种不同的格式。我个人更喜欢:
-
任何一种方式都可以。转义的引号是“戳”我眼睛的东西;)
标签: php jquery wordpress session file-upload