簡體   English   中英

memory_limit在PHP中如何工作?

[英]How does memory_limit work in PHP?

如果我有兩個腳本,並且我的memory_limit選項設置為64M (例如)。 如果我運行腳本1並花費40M,並同時運行腳本2,它有多少可用內存?

每個腳本是否最多有64M,或者它們共享此內存?

每個獨立運行的PHP腳本都有自己的內存限制( 由配置選項memory_limit設置 )。 此限制將繼承到所有包含的腳本中(因為這些腳本取決於父腳本)。

一個示例-兩個並行運行的腳本:

  • 您打開一個網頁/script1.php
  • 您還打開了一個網頁/script2.php

由於這兩個是完全獨立的(沒有簡單的方法可以發現“另一個腳本”正在運行,甚至不存在),因此它們每個將獲得64M的限制-因此允許使用的內存量為64M一台,到128M的兩台。 (為澄清起見,不可能在腳本之間“共享”此內存:如果script1.php僅消耗1MB,則無法將其限制的其余部分“提供”給script2.php)

另一種情況-一個腳本包括另一個腳本:

  • 您打開一個網頁/script1.php
    • 該腳本有一行require('script2.php')

在這種情況下,只有一個64MB的限制:無論它包括()或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是一個配置設置,因此可以在各個位置進行設置; 否則系統管理員可以阻止對其進行修改。

從PHP手冊:

這將設置允許腳本分配的最大內存量(以字節為單位)。 這有助於防止編寫不良的腳本耗盡服務器上的所有可用內存。 請注意,沒有內存限制,請將此偽指令設置為-1。

意味着每個腳本獲得相同的64M內存量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM