内存限制在PHP中是如何工作的?
如果我有两个脚本,并且我的内存限制在PHP中是如何工作的?,php,Php,如果我有两个脚本,并且我的内存限制选项设置为64M(例如)。如果我运行脚本1,它需要40M并同时运行脚本2,它有多少可用内存 每个脚本都有多达64M的内存吗?每个独立运行的PHP脚本都有自己的内存限制()。此限制继承到所有包含的脚本中(因为这些脚本依赖于父脚本) 一个示例-两个并行运行的脚本: 打开一个网页/script1.php 您还可以打开一个网页/script2.php 由于这两个脚本是完全独立的(没有简单的方法可以发现“另一个脚本”正在运行,甚至它的存在),它们将各自获得64M的限制
内存限制
选项设置为64M(例如)。如果我运行脚本1,它需要40M并同时运行脚本2,它有多少可用内存
每个脚本都有多达64M的内存吗?每个独立运行的PHP脚本都有自己的内存限制()。此限制继承到所有包含的脚本中(因为这些脚本依赖于父脚本) 一个示例-两个并行运行的脚本:
- 打开一个网页
/script1.php
- 您还可以打开一个网页
/script2.php
- 打开一个网页
/script1.php
- 该脚本有一行
require('script2.php')
- 该脚本有一行
script2.php
从script1.php
继承限制(以及其他php设置),并且此处使用的所有内存都计入该限制
请注意,可以从脚本内部更改此限制(如果您的服务器配置允许,大多数情况下都可以)。使用ini_集('memory_limit','128M')
将新限制设置为128 MB—但到目前为止脚本使用的所有内存仍计入该限制
脚本包括其他脚本并动态更改内存限制:
- 打开网页
(在script1.php中,从配置中限制64 MB)/script1.php
- 运行
(在script1.php中,继承的限制为64 MB)require('script2.php')
- 运行
(在script2.php中,显式更改为200MB)ini\u集('memory\u limit','200MB')
- 运行
(在script2.php中,如上所述限制200 MB)require('script3.php')
- 运行
(在script3.php中,继承的限制为200 MB)require('script4.php')
- 运行
(在script4.php中,显式更改为“no limit”)ini\u集('memory\u limit','-1')
- 运行
(在script4.php中,继承了“无内存限制”)require('script5.php')
- 运行
- 运行
- 运行
- 运行
注意:可以设置比当前更低的限制,但这有可能立即超出限制(“我们使用80 MB”-“将限制设置为64 MB”-“内存不足错误”);由于这种风险,很少尝试这样做 还要注意,
内存限制
是一种配置设置,因此可以进行设置;也可以由系统管理员对其进行修改。来自PHP手册:
这将设置脚本使用的最大内存量(以字节为单位)
允许分配。这有助于防止编写错误的脚本
耗尽服务器上的所有可用内存。请注意,没有
内存限制,将此指令设置为-1
这意味着每个脚本获得相同的6400万内存。内存限制是每个脚本可以分配的最大内存量。我想问你一个关于它如何工作的问题。我有一个由我们团队定制的框架。我们在一个有256MB内存限制的站点上使用它,我们的服务器有24GB的RAM,这是否意味着我们的服务器可以处理大约256*4*24的同时连接?我的意思是,该限制适用于站点的每个访问者,还是apache如何计算该限制?该限制适用于每个正在运行的PHP脚本(例如,如果访问者当前加载了五个页面,则该访问者当前的最大使用量为5*256):如果脚本尝试分配更多内存,它将失败-但是服务器不会分配内存,除非脚本确实需要它。请注意,除了PHP之外,服务器上还运行其他东西,因此您自己没有完整的24GB。此外,这是脚本可以获得的最大值-大多数脚本的请求远远小于最大值。