【发布时间】:2015-11-28 11:40:16
【问题描述】:
我试图弄清楚为什么我的 PHP 代码返回 HTML 页面而不是我正在寻找的 JSON 数据。该代码本质上允许上传文件。如果我上传一个相当小的文件(650KB),一切都会按预期工作。但是,当我上传更大的文件 (20MB) 时,文件仍然可以正常上传,但我没有返回所需的 JSON 数据。
这是我的 PHP 代码,没有实际的文件处理:
<?php
session_start();
if($_SESSION['status_cp'] != 1){
header("Location: index.html");
}
// include the files for accessing the 'live' database
include('assets/database/dbConfig.php');
include('assets/database/dbFns.php');
include('assets/utilities/ImageResizer.php');
$ret["success"] = false;
$picsFolder = "pics/";
$uploadsFolder = "uploads/";
if(isset($_FILES["file"])) {
// handle the file here...
$ret["success"] = true;
}
echo json_encode($ret);
?>
因此,对于较大的上传,返回的基本上是“index.html”文件。似乎会话即将到期并重定向到 HTML!?!。
另外,如果我删除了代码顶部的会话代码,一切都会按预期工作;返回正确的 JSON 数据。但是,我希望该代码在那里,所以不只是任何人都可以调用它。
由于我怀疑超时问题,我已将以下内容包含在 .htaccess 文件中并放置在网站的根目录中,但这没有任何区别。在服务器上运行 phpinfo() 确认正在使用这些设置。
php_value upload_max_filesize 110M
php_value post_max_size 120M
php_value max_execution_time 10800
php_value max_input_time 10800
调用 PHP 的 javascript 代码:
var formData = new FormData();
formData.append('file', file);
var uploadURL = "upload.php";
var jqXHR = $.ajax({
xhr: function() {
var xhrobj = $.ajaxSettings.xhr();
if (xhrobj.upload) {
xhrobj.upload.addEventListener('progress', function(event) {
var percent = 0;
var position = event.loaded || event.position;
var total = event.total;
if (event.lengthComputable) {
percent = Math.ceil(position / total * 100);
console.log('percent: ' + percent);
}
// set progress
status.setProgress(percent);
});
}
return xhrobj;
},
url: uploadURL,
type: 'POST',
contentType: false,
processData: false,
cache: false,
data: formData,
success: function(data) {
var response = jQuery.parseJSON(data);
}
});
谢谢。感谢您提供任何帮助。
[编辑]
来自var_dump($_POST, $_FILES); 的结果
array(5) {
["typeId"]=>
string(6) "tender"
["id"]=>
string(2) "27"
["name"]=>
string(8) "Test"
["documentName"]=>
string(7) "Testing"
["transferToFtp"]=>
string(4) "true"
}
array(1) {
["file"]=>
array(5) {
["name"]=>
string(25) "mbam-setup-2.1.6.1022.exe"
["type"]=>
string(24) "application/x-msdownload"
["tmp_name"]=>
string(48) "/storage/nfs/hmu_storage_02/shared/tmp/phpFrkeye"
["error"]=>
int(0)
["size"]=>
int(21546080)
}
}
【问题讨论】:
-
会话问题需要更多调查:如果您找不到您正在寻找的会话变量值,那么应该有一个很好的理由(可能一开始没有设置,等等)