我试图找出为什么我的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);
?>
因此,对于较大的上传内容,返回的内容基本上是&#39; index.html&#39;文件。似乎会话即将到期并重定向到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)
}
}
答案 0 :(得分:1)
嗯,事实证明会话变量确实设置不正确,但@Praveen通过提供有价值的信息加快了调试过程。我的本地login.php副本设置了正确的会话变量,所以我最初没有查看它。最后,我确实查看了服务器上实际存在的login.php文件,确实不一样......
将正确的副本上传到服务器更正了问题,JSON数据现在按预期返回。
答案 1 :(得分:0)
请在顶部添加:
header("Content-type: application/json");
如果您认为会话未设置,请尝试使用:
session_start();
以上代码是强制性的。我在你的代码中看不到。