HTML返回而不是JSON数据

时间:2015-11-28 11:40:16

标签: php html json .htaccess

我试图找出为什么我的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)
  }
}

2 个答案:

答案 0 :(得分:1)

嗯,事实证明会话变量确实设置不正确,但@Praveen通过提供有价值的信息加快了调试过程。我的本地login.php副本设置了正确的会话变量,所以我最初没有查看它。最后,我确实查看了服务器上实际存在的login.php文件,确实不一样......

将正确的副本上传到服务器更正了问题,JSON数据现在按预期返回。

答案 1 :(得分:0)

请在顶部添加:

header("Content-type: application/json");

如果您认为会话未设置,请尝试使用:

session_start();

以上代码是强制性的。我在你的代码中看不到。