PHP 的記憶體不夠用

直接在 php 讀取 31MB 的 .json 檔案, 在 Windows 上執行沒問題, 改放到 RAM 超級小的虛擬主機上, 一執行 php script, 就 crash, 顯示 500 error:

[Sun Dec 21 02:57:41.208976 2025] [core:notice] [pid 347231:tid 347231] AH00094: Command line: '/usr/sbin/apache2'
[Sun Dec 21 03:02:54.255907 2025] [php:error] [pid 347475:tid 347475] [client 172.71.124.192:9672] PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) in /var/www/dictionary/api.php on line 35

這個錯誤訊息代表 PHP 的記憶體不夠用了。系統預設通常只給 128MB,當程式處理大量資料時就會當掉。

修改設定檔

你需要修改 php.ini 檔案來調高上限。在 Ubuntu 中,Apache 使用的路徑通常是 /etc/php/8.x/apache2/php.ini,請把 8.x 換成你的 PHP 版本。

找到 memory_limit 這一行,把 128M 改成更大的數值,例如 256M 或 512M。如果確定程式需要極大空間,也可以視主機記憶體狀況調整。

重新啟動服務

改完存檔後,設定不會立刻生效。你必須重啟 Apache 伺服器,讓它讀取新的設定值。

執行指令 sudo systemctl restart apache2。重啟後,你可以再次執行原本報錯的 API,檢查是否還會出現記憶體不足的訊息。

檢查程式碼

如果調高到 512M 還是報錯,可能就要回頭看程式碼了。報錯點在 api.php 的第 35 行,那裡可能正在讀取非常大的資料庫結果,或是陷入了無窮迴圈。

長遠來看,優化程式碼減少記憶體佔用,會比單純調高記憶體上限更安全。

需要我幫你看一下 api.php 第 35 行附近的程式碼邏輯嗎?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *