如果字符串太长,PHP不会收到POST

时间:2016-05-13 06:49:12

标签: php ajax

所以我试图通过ajax将一串字符发送到php脚本,这里是Ajax

function gVerify(){
    var response = $('#g-recaptcha-response').val();
    console.log(response);
    $.ajax({
        type: 'POST',
        url: 'recaptcha.php',
        data: { response: response},
        success: function(data) {
            if(data == 'true'){
                console.log("Success");
            } else{
                console.log(data);
            }
        }
    });
};

和php

<?php
$ip = $_SERVER['REMOTE_ADDR'];
$response = $_POST['response'];

$url='https://www.google.com/recaptcha/api/siteverify';
$secret = '6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe';

$verifyCaptcha = file_get_contents($url."?secret=".$secret."&response=".$response."&remoteip=".$ip);
$captchaReply = json_decode($verifyCaptcha);

if(isset($captchaReply->success) AND $captchaReply->success == true){
    //Captcha successful
    return 1;
} else {
    //captcha failed
    echo json_encode($response);
}
?>

问题是如果值太长,php变量$response不会收到post值。我尝试手动发送字母数字字符串,如果我发送1000个字符,它就不会收到,如果我发送500个字符,变量确实收到数据,我通过console.log(data);将结果返回到控制台中,所以我知道一切其他工作。那么这个地方有尺寸限制吗?

3 个答案:

答案 0 :(得分:1)

在php.ini文件中设置了post_max_size

您需要在此文件中增加该限制。

见这里:http://php.net/manual/en/ini.core.php

答案 1 :(得分:1)

在服务器中配置最大大小。如果您使用.htaccess文件,则可以通过以下代码修改该值:

#set max post size
php_value post_max_size 20M

瓦剌

答案 2 :(得分:0)

我通过向我发送的数据添加JSON.stringify()来解决问题。所以代码现在看起来像这样:

function gVerify(){
    var response = $('#g-recaptcha-response').val();
    $.ajax({
        type: 'POST',
        url: 'recaptcha.php',
        data: { response: JSON.stringify(response) },
        success: function(data) {
            if(data == 1){
                console.log("Success");
            } else{
                console.log(data);
            }
        }
    });
};

我在php中删除了令牌,但至少我得到了完整的令牌。