memory_limit如何在PHP中运行?

问题描述 投票:1回答:2

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

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

php
2个回答
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.phpscript1.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


3
投票

从PHP手册:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.