【问题标题】:PHP Memory limit not taking effect in normal php scriptsPHP内存限制在普通php脚本中不生效
【发布时间】:2023-04-09 15:14:01
【问题描述】:

我已将 php 的内存限制分配为 999m,因此它会出现在 phpinfo 中,如

memory_limit 999M 999M

当我使用 phpinfo();显示它。

不幸的是,当我尝试运行一个相当大的脚本时,似乎限制为 256M

致命错误:/xxx/wp-includes/wp-db.php 第 1403 行中允许的内存大小为 268435456 字节已用尽(尝试分配 40 字节)

任何人都知道为什么或我可以做些什么来增加限制(并让它真正起作用)

如果有帮助,我正在运行 centos5 32bit 并且 php 在 fcgi 模式下运行

【问题讨论】:

  • 您编辑了正确的php.ini? (见phpinfo(),或php -i(注意,不同的sapis(apache-module,cgicli,...)使用不同的php.inis))你重启了你的服务器?你有没有想过,为什么你的脚本需要这么多内存?!
  • memory_limit 999M 999M - 你的意思是memory_limit 999M
  • 您的 WordPress 安装不是通过 ini_set('memory_limit', ...) 设置了自己的内存限制吗?
  • 如何优化脚本,你应该不需要那么多内存。
  • 是的,我确实编辑了正确的 php.ini,它在 phpinfo 中显示正常

标签: php mysql wordpress


【解决方案1】:

键入php --ini 查找配置路径。

memory_limit 更改为您需要的任何值。 确保您在这两个文件上都进行了更改:php.iniconf.d/php-memory-limits.ini

(在我的情况下,我使用 -1 来获得无限内存(当然,不是无限,但我的计算机可以处理多少))

【讨论】:

    【解决方案2】:

    确保您在 apache 中的服务器/虚拟服务器未配置为覆盖 PHP 配置。即使你使用:

    php_value memory_limit 512M
    

    你的服务器可能有类似的东西:

    php_value memory_limit 32M
    

    这将使您在 php.ini 中的更改无效。 要解决这个问题:

    • 在您的服务器配置中编辑 php_value 值。
    • 或将其从您的 Web 服务器中删除,以便它使用 PHP 全局设置。

    【讨论】:

      【解决方案3】:

      我遇到了类似的问题,对我来说,这是一个额外的 ini 文件,它加载了名为“99-liip-developer.ini”的文件。在文件的顶部,memory_limit 被定义为 265M,它覆盖了 php.ini 中定义的 memory_limit。

      希望这对任何人都有帮助。

      【讨论】:

      • 在 /etc/nginx/fpm/pool.d 中找到了一个名为 www.conf 的文件。我从没想过要去看那里。
      • 谢谢! :) 这让我发疯了
      • 也许还要寻找 /usr/local/lib/php.ini 或 /usr/local/php/lib/php.ini
      • 谢谢!这也让我发疯了:D
      • 在 phpinfo() 输出中有“Additional .ini files parsed”键。
      【解决方案4】:

      创建一个名为test.php的php文件,放入:

      <?php
      phpinfo();
      ?>
      

      检查“配置文件 (php.ini) 路径”和“加载的配置文件”以查看正确的 php.ini 路径。 编辑 php.ini 并搜索 memory_limit 并将其设置为:

      memory_limit = 999M
      

      检查您在 php.ini 文件中是否有多个 memory_limit 出现。在这种情况下,删除它。

      停止apache,然后重新启动(apachectl restart | apachectl graceful | kill -1 不行。停止,然后启动)。

      重新检查 test.php 以查看是否获取了新参数。

      【讨论】:

      • 获取了参数,只是在wordpress中不起作用,没有任何覆盖,对ini_set和nada做了一个grep
      • @DarrellDing 你应该 grep php_value 如果你想看看它是否也设置在 apache 的某个地方。
      • 我的 wordpress 版本 (3.1.2) 定义了一个名为 wp-includes/default-constants.php 的文件,该文件创建了一个名为 WP_MEMORY_LIMIT 的常量。您可以将其值覆盖到 wp-settings.php 中。如果 php.ini 中设置的 php 内存限制值小于您使用 WP_MEMORY_LIMIT 定义的值,Wordpress 会覆盖该值。
      • 已修复,不是 WP_MEMORY_LIMIT,显然 wordpress 使用 WP_MAX_MEMORY_LIMIT 作为他们的管理员最大限制。
      • 是我最接近答案的地方
      【解决方案5】:

      不确定,但这是在 google 搜索中出现的:

      http://wordpress.org/support/topic/plugin-cbnet-ping-optimizer-lots-of-errors-on-ping-optimizer-_help-please

      ping 优化器在数据库上塞满了一个表,清除解决了这个问题。错误几乎相同:

      致命错误:允许的内存大小为 268435456 字节已用尽(已尝试 分配 80 个字节)在 /home/user1/public_html/domain/wp-includes/wp-db.php 在第 1400 行

      所以看看插件是否也在做同样的事情,然后清除它并将其登录到某个地方的 WP 上,这样如果是问题就可以修复它。

      【讨论】:

      • 我的问题是无论我做什么我都无法增加内存限制,而不是我有一个错误
      • @DarrellDing 你在使用 Memory Bump 之类的插件吗?您可能还想检查那里的设置。一路向下看:php.ini(如果有多个,则为本地 php.ini)、.htaccess,并搜索 php 文件以查找更改。检查旁边的一个小脚本(只是一个不在 wordpress 中的快速脚本)以查看 php.ini 和/或 .htaccess 文件是否使用ini_get('memory_limit') 正确设置它。
      【解决方案6】:

      您可以尝试将其放在文件的顶部

      ini_set('memory_limit', '999M')
      

      您有多少系统内存可用?编辑 php.ini 文件后是否重新启动 Apache(我假设您已将 php 作为模块安装)?

      试试:

      sudo /etc/init.d/httpd restart
      

      【讨论】:

      • 我已经尝试过,由于某种模糊的原因,它仍然会在 256 处达到最大值
      • 你重启了apache吗?您的 php.ini 中的代码也无效...您确定您的 php.ini 中没有第二个设置覆盖您的自定义行吗?也检查一下...
      • 它在 phpinfo 中显示内存限制为 999m,所以现在这不是问题,我只是想知道它为什么在 wordpress 中不起作用。 Wordpress 的 wp-config 也已设置为最多使用 999
      • 你……你……重启了……apache吗?
      • 谁管理您的服务器?如果通过命令行运行“free -m”,当前有多少可用内存?
      【解决方案7】:

      我建议您将其设置在脚本的顶部:

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

      在消耗大量内存的脚本中,而不是让所有脚本消耗这么多内存。您也可以将其放在 /wp-includes/ 的 .htaccess 中

       php_value memory_limit 512M
      

      更多信息和解释在这里: http://www.mydigitallife.info/php-allowed-memory-size-exchausted-fatal-error/

      【讨论】:

      • 它已经在/etc/php.ini下设置了所以限制已经够高了,只是想知道为什么它在脚本中没有生效但是限制显示在一个phpinfo下
      • 因为它可以被wordpress在wp-config.php文件中否决。
      • 例如在该文件中使用define('WP_MEMORY_LIMIT', '64M');
      • 不是,已经有两个 ini_set('memory_limit', '999M');定义('WP_MEMORY_LIMIT','999M');在 wp-config.php 中定义
      • 嗯,很简单,还是有限制的地方。这可以由您的虚拟主机、在某些文件、.htaccess 等中设置。我建议您尝试使用所有选项来覆盖 memory_limit,而无需询问为什么它不能按您想要的或应该的方式工作。也可以在这里查看同样的问题stackoverflow.com/questions/3903363/… 也许它可能会有一些用处:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多