memory_limit如何在PHP中运行?

时间:2015-12-15 09:35:46

标签: php

如果我有两个脚本且我的memory_limit选项设置为 64M (例如)。如果我运行脚本1并且需要 40M 并同时运行脚本2它有多少内存空闲?

每个脚本最多是 64M 还是共享此内存?

2 个答案:

答案 0 :(得分:4)

独立运行的每个 PHP脚本都受其自身内存限制(as set by the configuration option memory_limit)的限制。此限制将继承到所有包含的脚本中(因为这些脚本取决于父脚本)。

示例 - 两个并行运行的脚本:

  • 您打开了一个网页/script1.php
  • 您还打开了一个网页/script2.php

由于这两个是完全独立的(没有简单的方法可以发现“另一个脚本”正在运行,或者甚至存在),它们将获得64M限制每个 - 所以他们被允许使用的内存量是64M,一个是128M,两个。 (澄清一下,不可能在脚本之间“共享”这个内存:如果script1.php只消耗1MB,它就不能“给”其余的限制到script2.php)

另一种情况 - 一个脚本包括另一个脚本:

  • 您打开网页/script1.php
    • 该脚本有一行require('script2.php')

在这种情况下,只有一个64MB的限制:无论它包含多少个文件()s或require(),它仍被视为单个脚本。换句话说,script2.php继承了script1.php的限制(以及其他PHP设置),此处使用的所有内存都计入该限制。

请注意,可以从脚本中更改此限制(如果您的服务器配置允许此操作 - 大部分都可以)。使用ini_set('memory_limit', '128M');将新限制设置为128 MB - 但到目前为止,脚本使用的所有内存仍然计入此限制。

脚本包括其他脚本并动态更改内存限制:

  • 您打开网页/script1.php(在script1.php中,限制64 MB配置)
    • 运行require('script2.php')(在script1.php中,限制64 MB继承)
      • 运行ini_set('memory_limit','200MB')(在script2.php中,显式更改为200 MB)
      • 运行require('script3.php')
      • (在script2.php中,限制为200 MB,如上所述)
        • 运行require('script4.php')(在script3.php中,限制继承200 MB)
          • 运行ini_set('memory_limit','-1')(在script4.php中,明确更改为“无限制”)
          • 运行require('script5.php')(在script4.php中,“对内存没有限制”继承)

注意:可以设置较低限制,但这可能会立即超出它(“我们使用80 MB” - “设置限制为64 MB” - “内存不足错误“);因为这种风险,很少尝试。

另请注意,memory_limit是配置设置,因此可以设置为in various places;或者系统管理员可以prevented进行修改。

答案 1 :(得分:3)

从PHP手册:

  

这将设置脚本的最大内存量(以字节为单位)   允许分配。这有助于防止编写糟糕的脚本   吃掉服务器上所有可用的内存。请注意,没有   内存限制,将此指令设置为-1。

意味着每个脚本获得相同的64M内存量。