【问题标题】:Mysql MediumText causes PHP Fatal error: Allowed memory size of 8388608 bytes exhaustedMysql MediumText导致PHP致命错误:允许的内存大小为8388608字节已用完
【发布时间】:2009-02-01 01:39:04
【问题描述】:

我有我自己的包装 mysqli 库的 php 数据对象类。它可以很好地处理大多数数据类型,包括文本。一旦我将表格列从文本更改为中文本,我就会收到此问题标题中描述的错误。我已经在几个共享主机环境中测试了我的 php 脚本,但我只在其中一个环境中遇到了这个错误。

MediumText 和 LongText 真的会占用那么多内存吗?

我将开始优化我的 php 类,但我想确保我走在正确的轨道上..

【问题讨论】:

    标签: php memory-management


    【解决方案1】:

    mediumtext 最多可容纳http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html 中指定的 16777215

    这似乎 > 超过了 php.ini 定义的内存限制。所以这是有道理的。

    【讨论】:

      【解决方案2】:

      mediumtext 和 longtext 字段可能包含这么多信息。您只是更改列类型,还是更改列类型然后将其塞满文本?如果是前者,我的猜测是有一些失控的循环/递归正在构建一堆对象/数组/某些东西,而你正在达到 PHP 的默认内存上限。

      您可以通过 php.ini 控制分配给 PHP 的内存量,也可以使用 ini_set 函数在运行时设置值。

      ini_set("memory_limit","12M");
      

      【讨论】:

      • 谢谢,我把它设置为 20M,一切正常!我很惊讶共享主机允许我请求更多这样的内存......我想我可以从 ini_set() 中挤出的内存量是有限的?
      • 大多数共享主机是由营销人员和/或商务人士组成的阴谋集团运营的,他们不太了解或关心技术细节(这就是它如此不可靠的原因)。运行良好的共享主机将配备监视器,这些监视器将终止并开始消耗过多内存的进程。
      • memory_limit 本身理论上应该仅限于盒子上当前可用的内存。
      【解决方案3】:

      该托管服务提供商可能将 PHP 设置为仅允许脚本占用 8 MB 内存。

      memory_limit = 8M ;脚本可能消耗的最大内存量

      您可以使用 phpinfo() 检查设置为什么,使用以下内容创建一个脚本,上传它并将您的网络浏览器指向它(确保在完成后将其删除,因为它会泄露潜在的敏感信息):

      phpinfo()

      ?>

      在底部寻找“memory_limit”。如果它设置为 8 MB,那就是你的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-06
        • 2015-07-06
        • 2018-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-07
        相关资源
        最近更新 更多