首頁 / 最新資訊 / 網站出現 500 Internal Server Error 怎麼查?PHP 與主機錯誤排查指南
2026-06-12 · 最新資訊

網站出現 500 Internal Server Error 怎麼查?PHP 與主機錯誤排查指南

網站突然顯示 500 Internal Server Error,通常代表 PHP 程式、檔案權限、.htaccess、PHP 版本或主機服務發生錯誤。本文整理 cPanel、aaPanel、1Panel 與一般 Linux 主機常用的排查順序。

網站原本正常,卻突然顯示 500 Internal Server Error,代表伺服器收到請求後,執行過程發生錯誤,但沒有把真正的錯誤原因顯示在瀏覽器上。

500 錯誤不一定代表主機壞掉,也不一定要立刻重做網站。常見原因包括 PHP 程式錯誤、PHP 版本不相容、檔案權限錯誤、.htaccess 規則異常、PHP-FPM 故障,或資料庫連線失敗。

先提醒:不要只是不斷重新整理,也不要一看到 500 就直接重裝主機。先查看錯誤紀錄,通常能更快找到真正原因。

500 Internal Server Error 常見症狀

  • 整個網站所有頁面都出現 500 錯誤。
  • 只有某一個功能、表單或後台頁面出錯。
  • 網站搬家或升級 PHP 後才開始發生。
  • 修改 .htaccess 後網站立即無法開啟。
  • 網站偶爾正常、偶爾出現 500 或 503。
  • 前台正常,但 AJAX、API 或 DataTables 顯示錯誤。

不同症狀代表的排查方向不同。若整站都無法開啟,應先檢查主機服務、PHP-FPM、.htaccess 與 PHP 版本;若只有單一功能出錯,通常更接近程式或資料庫問題。

1)先查看真正的錯誤紀錄

瀏覽器顯示的 500 只是結果,真正的原因通常會寫在 Apache、Nginx、LiteSpeed 或 PHP 的錯誤紀錄中。

一般 Linux 主機可先查看:

tail -100 /var/log/httpd/error_log
tail -100 /var/log/apache2/error.log
tail -100 /var/log/nginx/error.log

cPanel/WHM 主機常見紀錄位置:

tail -100 /usr/local/apache/logs/error_log

網站帳號自己的 PHP 錯誤紀錄,也可能位於:

/home/帳號/logs/
/home/帳號/public_html/error_log

aaPanel、1Panel 或自行安裝的 PHP-FPM,則要查看對應 PHP 版本的錯誤紀錄及 PHP-FPM 服務紀錄。

常見關鍵字包括:

  • PHP Fatal error
  • Uncaught Error
  • Allowed memory size exhausted
  • Permission denied
  • Primary script unknown
  • Call to undefined function
  • Class not found
  • SQLSTATE

重點:排查 500 錯誤時,錯誤紀錄的時間必須和你實際測試網站的時間接近,否則很容易看到舊錯誤而判斷錯方向。

2)檢查最近是否修改過程式

如果網站是在更新程式、安裝套件或修改設定後出現 500,應先確認最近變更過哪些檔案。

  • 是否少了分號、括號或引號。
  • 是否引用不存在的 PHP 檔案。
  • 是否修改資料庫帳號或密碼。
  • 是否新增伺服器上不存在的 PHP 函式。
  • 是否上傳了不完整的程式版本。
  • 是否在正式站直接覆蓋檔案,卻沒有備份。

可先執行 PHP 語法檢查:

php -l index.php

檢查整個專案時,可以針對最近修改的 PHP 檔案逐一執行。若主機有多個 PHP 版本,也要使用網站實際使用的 PHP 執行檔,不要只使用系統預設的 php。

3)確認 PHP 版本是否相容

網站搬家後出現 500,常見原因之一是新舊主機的 PHP 版本不同。

例如舊網站原本使用 PHP 5.6 或 PHP 7.2,新主機卻直接切換到 PHP 8.1 或 PHP 8.2,舊程式可能會因為已移除的函式、語法限制或套件不相容而失敗。

常見情況包括:

  • mysql_connect() 在新版 PHP 已無法使用。
  • 舊版程式使用已移除的函式。
  • 函式參數數量在新版 PHP 中變得更嚴格。
  • 舊套件不支援 PHP 8。
  • PHP 擴充模組沒有安裝,例如 mysqli、pdo_mysql、mbstring、curl。

可建立暫時測試檔確認版本:

<?php
echo PHP_VERSION;

確認完成後應刪除測試檔,避免公開過多主機資訊。

4)檢查 .htaccess 是否有錯誤

Apache 或 LiteSpeed 網站若使用錯誤的 .htaccess 指令,可能直接造成整站 500。

可先暫時將檔案改名:

.htaccess

改成:

.htaccess_backup

再重新測試網站。如果改名後網站恢復,代表問題可能出在:

  • RewriteRule 或 RewriteCond 語法錯誤。
  • 使用主機不支援的 Apache 指令。
  • 重複設定 PHP Handler。
  • 舊主機的 Rewrite 設定搬到新環境後不相容。
  • HTTP 與 HTTPS 轉址條件互相衝突。

但要注意,直接停用 .htaccess 可能讓網址改寫失效,因此這個動作主要用來確認問題來源,不代表可以永久刪除。

5)確認檔案與目錄權限

檔案權限太寬或太嚴,都可能造成 500、403 或 PHP 無法執行。

一般網站常見設定為:

  • 目錄:755
  • 一般檔案:644
  • 需要寫入的目錄:依主機 PHP 執行模式調整

不建議為了解決問題,直接把整個網站改成 777。這可能暫時掩蓋權限問題,卻增加網站遭竄改或植入惡意檔案的風險。

也要確認檔案擁有者是否正確。網站從 root 帳號解壓縮或搬移後,檔案可能變成 root 所有,導致網站帳號無法讀寫。

6)檢查 PHP-FPM 或網站服務

如果網站不是固定出錯,而是偶爾出現 500、502 或 503,可能與 PHP-FPM 程序、記憶體或最大子程序數量有關。

可查看 PHP-FPM 狀態:

systemctl status php-fpm

不同主機的服務名稱可能不同,例如:

systemctl status php72-php-fpm
systemctl status php74-php-fpm
systemctl status php81-php-fpm

常見原因包括:

  • PHP-FPM 程序停止。
  • 記憶體不足,被系統終止。
  • pm.max_children 設定太低。
  • 程式執行時間過長。
  • 大量爬蟲或惡意請求占滿程序。
  • 資料庫查詢卡住,造成 PHP 程序堆積。

不要只是不斷重啟 PHP-FPM。重啟後短暫恢復,通常代表問題尚未真正解決,還要繼續查看程序數、記憶體與網站存取紀錄。

7)檢查 PHP 記憶體限制

如果錯誤紀錄出現:

Allowed memory size exhausted

代表 PHP 執行時使用的記憶體超過 memory_limit。

這可能是設定太低,也可能是程式一次讀取太多資料、處理過大圖片、產生大型報表,或發生無限迴圈。

只提高 memory_limit 不一定是正確解法。應先確認是哪一段程式消耗記憶體,再判斷要調整限制、分批處理資料,還是修正程式邏輯。

8)確認資料庫連線是否正常

有些網站在資料庫連線失敗時,不會顯示清楚的資料庫錯誤,而是直接回傳 500。

應確認:

  • 資料庫主機名稱是否正確。
  • 資料庫帳號與密碼是否正確。
  • 資料庫使用者是否有權限。
  • MySQL 或 MariaDB 是否正在執行。
  • 資料庫連線數是否已滿。
  • 搬家後資料表是否完整匯入。
  • 新版 MySQL 的 SQL Mode 是否影響舊程式。

查看資料庫服務:

systemctl status mariadb
systemctl status mysql

如果錯誤只發生在新增、修改或結帳功能,也要留意欄位沒有預設值、欄位型態不相容,以及 Strict Mode 所造成的寫入錯誤。

9)只有 AJAX 或 DataTables 出錯怎麼辦?

前台頁面正常,但 DataTables 顯示 Invalid JSON response,不一定是 DataTables 本身故障。

常見情況是後端 PHP 原本應回傳 JSON,卻混入:

  • PHP Notice 或 Warning。
  • session_start 重複執行提示。
  • 資料庫錯誤訊息。
  • HTML 錯誤頁面。
  • 登入逾時後的重新導向內容。

可先打開瀏覽器開發者工具,查看 Network 中該 AJAX 請求的 Response,通常可以直接看到真正的 PHP 錯誤。

建議的排查順序

  1. 記錄錯誤發生時間與網址。
  2. 查看 Apache、Nginx、LiteSpeed 或 PHP 錯誤紀錄。
  3. 確認最近是否修改程式、PHP 版本或主機設定。
  4. 暫時排除 .htaccess 問題。
  5. 檢查檔案權限與擁有者。
  6. 檢查 PHP-FPM、記憶體與程序數量。
  7. 確認資料庫服務與連線設定。
  8. 修正後重新測試,並確認錯誤紀錄沒有持續產生新錯誤。

遇到 500 錯誤時,不建議直接做的事

  • 不要直接刪除整個網站重新上傳。
  • 不要把所有檔案權限改成 777。
  • 不要在沒有備份的情況下升級 PHP。
  • 不要只靠重啟主機解決問題。
  • 不要把完整錯誤訊息、資料庫密碼或 API 金鑰公開貼到網路。
  • 不要在正式站反覆修改,卻沒有留下變更紀錄。

結論:500 Internal Server Error 只是表面訊息,真正原因通常已經寫在錯誤紀錄裡。正確做法是先確認錯誤時間、查看 log,再依序檢查程式、PHP 版本、.htaccess、權限、PHP-FPM 與資料庫。

守站人可協助處理 cPanel、aaPanel、1Panel 與一般 Linux 主機上的網站 500 錯誤、PHP 異常、網站搬家與舊系統接手問題。

LINE 官方帳號