【问题标题】:PHP Limit in POST variablesPOST 变量中的 PHP 限制
【发布时间】:2011-02-21 09:54:12
【问题描述】:

我正在尝试通过 POST 方法将数组发送到 PHP 脚本。首先我对其进行serialize(),然后在其上使用base64_encode()。收到它后,脚本然后 base64_decode() 它然后 unserialize() 它。我知道使用 base64_encode 函数会增加 33% 的数据大小,所以我担心 POST 变量可能会不堪重负,从而给我一个错误。可以发布的字符串是否有限制?或者更好的是,除了 base64_encode 之外,我还有其他方法可以将数组正确传递给其他脚本吗?顺便说一句,如果没有在序列化中使用 base64_ 函数,我会收到“错误:.. 偏移”通知。

【问题讨论】:

  • 这是来自表格吗?您希望您的数据有多大?任何不在内部存储的理由,例如在由会话 ID 标识的文件中?

标签: php post encoding base64


【解决方案1】:

一个负责 POST 最大大小的 php.ini 值:

post_max_size = 10M

【讨论】:

    【解决方案2】:

    这取决于数组的内容。如果它主要是文本,那么您可以使用 gzcompress/gzuncompress 压缩/解压缩生成的序列化对象:

    $encoded = base64_encode(gzcompress(serialize($original)));
    
    $original = unserialize(gzuncompress(base64_decode($_POST['encoded'])));
    

    gzencode/gzdecode 可能会为较大的数据提供更好的压缩。如果你的数组包含二进制数据,或者更糟糕的压缩数据,那么这种技术可能不会有太大的收获。

    除了已经提到的 PHP 配置之外,您的 Web 服务器还可以施加 POST 大小限制,例如 apache 中的 LimitRequestBody 指令:http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestbody

    【讨论】:

    • 嗯...我将通过双打,所以也许我可以使用 gz_ 函数,不是吗?
    • 我已经对包含 100、10,000 和 1,000,000 个随机双精度数的数组进行了一些测试。在所有情况下,它们都使用 gzcompress 压缩到小于原始大小的 50%(分别约为 48%、42% 和 41%)。
    【解决方案3】:

    无需担心大小,但我会考虑使用 sessions 来达到此目的

    【讨论】:

    • 不知道会话,数据库怎么样?
    • @Briedis 如果您还是要将这些数据保存在数据库中 - 然后保存它。但如果它是临时数据,那么会话是您的选择。顺便说一句,在您的问题中添加某些示例和用户案例,您将大大提高答案质量
    【解决方案4】:

    1) 可以 POST 的最大数据量是 php.ini 中的 post_max_size 指令。见:http://www.php.net/manual/en/ini.core.php#ini.post-max-size

    2) 或许你可以通过 $_SESSION 做到这一点?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 2018-02-10
      • 2012-03-30
      • 2014-09-12
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多