如果我有两个脚本且我的memory_limit
选项设置为 64M (例如)。如果我运行脚本1并且需要 40M 并同时运行脚本2它有多少内存空闲?
每个脚本最多是 64M 还是共享此内存?
答案 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')
的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内存量。