【问题标题】:php post empty if textarea over 1 million characters如果 textarea 超过 100 万个字符,则 php post 为空
【发布时间】:2023-04-06 18:52:01
【问题描述】:

我有一个 textarea,如果字符数少于 100 万,它就可以正常工作。一旦发布了超过 100 万个字符的内容,$_POST 中就会缺少该字段(所有其他字段都已发布)。

这可能是什么原因造成的?在搜索我所看到的所有内容时,没有字符限制,只有帖子大小限制和内存限制。没有显示任何错误,并且这些错误设置远远超过 2Mb 文本大小。

【问题讨论】:

  • 这可能与您的网络服务器设置有关。你用的是什么服务器?
  • Apache 与 nginx 代理
  • 我对这个领域一无所知,但你应该检查你的服务器文档并寻找这样的帖子:stackoverflow.com/questions/11686288/…
  • 100 万个字符对于 textarea 框来说是非常多的数据。为什么不简单地使用文件上传选项?据我所知,文本区域没有“硬限制”。尝试设置 maxlength = 1000001(HTML5 标记),看看是否确实可以获得超过 100 万个字符
  • 显然 LimitRequestBody 在我的控制面板中默认设置为 0。我尝试在 httpd.conf 中手动设置它,但没有任何区别。内容是动态生成的字符串(PGP 加密),然后发布到服务器。问题是,如果块超过 100 万个字符(大约 524Kb),它就会消失。

标签: php html


【解决方案1】:

设法解决了这个问题,它是 suhosin 限制字符。我需要设置以下内容:

suhosin.request.max_value_length = 100000000
suhosin.post.max_value_length = 100000000

【讨论】:

  • 是的!我有同样的问题......解决它。
【解决方案2】:

您是否尝试在 php.ini 文件中增加 post_max_size

此外,您还可以使用其他方式发布您的数据,即使用:

//execute an async method
function curl_request_async($url, $params, $type='GET'){

    $post_params = array();
    foreach ($params as $key => &$val) {
        if (is_array($val)) $val = implode(',', $val);
        $post_params[] = $key.'='.urlencode($val);
    }
    $post_string = implode('&', $post_params);

    $parts=parse_url($url);
    $fp = fsockopen($parts['host'],
        (isset($parts['scheme']) && $parts['scheme'] == 'https')? 443 : 80,
        $errno, $errstr, 999999999);

    $out = "$type ".$parts['path'] . (isset($parts['query']) ? '?'.$parts['query'] : '') ." HTTP/1.1\r\n";
    $out.= "Host: ".$parts['host']."\r\n";
    $out.= "Content-Type: application/x-www-form-urlencoded\r\n";
    $out.= "Content-Length: ".strlen($post_string)."\r\n";
    $out.= "Connection: Close\r\n\r\n";
    // Data goes in the request body for a POST request
    if ('POST' == $type && isset($post_string)) $out.= $post_string;

    fwrite($fp, $out);
    fclose($fp);
}

你可以这样调用这个函数:

$url = "somefile.php";
$data['mydata'] = "some data some data some data";
curl_request_async( $url, $data, 'POST' );

注意:

不要在文件"somefile.php" 中使用任何类型的基于会话的身份验证。您可以访问$_POST['mydata'] 之类的帖子数据。你也可以通过GET调用这个函数。不知道你真正在寻找什么。

【讨论】:

  • 是的,这个设置远高于帖子大小
  • 请检查我的更新!
猜你喜欢
  • 2020-01-19
  • 2022-09-22
  • 2016-01-24
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多