我无法使用PHP获取文件上传的进度,我的网站托管的服务器使用的是php v5.6。
我也有#upload; uploadprogress'在我的cpanel管理器中启用了设置。
我尝试按照本教程: Tracking Upload Progress with PHP and JavaScript
但我将其与其他一些使用ajax请求处理文件上传的代码合并。
我的表单代码:
function uploadFile() {
var uploadFile = $("#file")[0].files[0];
timer = setInterval(getStatus,1000);
$.ajax(
{
url : "upload.php",
type: 'POST',
data : new FormData($('form')[0]),
cache: false,
contentType: false,
processData: false,
xhr: function() {
var myXhr = $.ajaxSettings.xhr();
if (myXhr.upload) {
// For handling the progress of the upload
myXhr.upload.addEventListener('progress',
function(e) {
if (e.lengthComputable) {
if (e.loaded < e.total) {
$('#process').html(((e.loaded / e.total) * 100).toFixed(1) + "%");
} else {
$('#process').html("Processing upload, please wait.");
}
}
} , false);
}
return myXhr;
},
success: function (response) {
$('#process').html(response);
clearTimeout(timer);
}
}
);
}
function getStatus() {
$.get("progress.php",
function(response) {
$("#process2").html(response);
}
);
}
Javascript代码: var timer;
session_start();
$uploadedFile = $_FILES["file"];
move_uploaded_file($uploadedFile['tmp_name'],$uploadedFile["name"]);
echo $uploadedFile["name"]." was uploaded";
upload.php的
session_start();
$key = ini_get("session.upload_progress.prefix") . "myForm";
if (!empty($_SESSION[$key])) {
$current = $_SESSION[$key]["bytes_processed"];
$total = $_SESSION[$key]["content_length"];
echo $current < $total ? ceil($current / $total * 100) : 100;
}
else {
echo 100;
}
progress.php
CloudBlockBlob
不幸的是在我的JS中: $(&#39; #process&#39;)。html(((e.loaded / e.total)* 100).toFixed(1)+&#34;%&#34;);
只获取获取请求所需的时间,而不是实际上传文件。
我希望我提供了足够的信息来获得帮助。
答案 0 :(得分:0)
您必须确保您的服务器使用mod_php运行PHP。
我在nginx上运行Drupal并警告我
&#34;您的服务器无法显示文件上传进度。文件上传进度需要运行带有mod_php的PHP的Apache服务器。&#34;