直接在 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 行附近的程式碼邏輯嗎?