在 /var/log/apache/error.log 可以看到錯誤訊息:
PHP Fatal error: Uncaught Error: Class "SQLite3" not found in /var/www/dictionary/api.php:47\nStack trace:\n#0 /var/www/dictionary/api.php(97): get_db()\n#1 {main}\n thrown in /var/www/dictionary/api.php on line 47
這個錯誤是因為你的 PHP 環境沒有安裝或啟用 SQLite3 的擴充模組。雖然 PHP 核心支持 SQLite,但在 Ubuntu 上通常需要獨立安裝。
安裝 SQLite 模組
你需要針對你的 PHP 版本安裝對應的擴充套件。最直接的方法是執行安裝指令。
指令為 sudo apt install php-sqlite3。這會安裝必要的函式庫,讓 PHP 能夠呼叫 SQLite3 類別。
確認模組狀態
安裝完成後,模組通常會自動啟用。你可以透過指令 php -m | grep sqlite 來確認清單中是否有出現 sqlite3。
如果有出現,代表模組已經就緒。如果沒有,可能需要手動執行 sudo phpenmod sqlite3 來開啟它。
重啟 Apache
跟修改記憶體上限一樣,新增擴充模組後必須讓網頁伺服器重新載入設定。
請執行 sudo systemctl restart apache2。重啟後,api.php 第 47 行的 Class SQLite3 not found 錯誤應該就會消失。
檢查資料庫檔案權限
模組裝好後,如果程式還是跑不動,通常是讀不到資料庫檔案。請確保 Apache 的使用者(通常是 www-data)有權限讀取你的 .db 檔案。
同時,放資料庫的資料夾也需要寫入權限,否則 SQLite 無法產生暫存檔,會導致連線失敗。
安裝完模組後,你的 API 還有出現其他錯誤訊息嗎?
錯誤訊息:
➜ apache2 sudo phpenmod sqlite3
WARNING: Module sqlite3 ini file doesn't exist under /etc/php/8.3/mods-available
這個警告代表雖然你嘗試啟用模組,但系統目錄裡根本沒有 SQLite3 的設定檔,通常是因為套件沒有安裝成功。
重新安裝正確套件
在 Ubuntu 中,你需要確保安裝的是 php8.3-sqlite3 這個特定版本的套件。
請執行 sudo apt update,接著執行 sudo apt install php8.3-sqlite3。系統會自動在 mods-available 資料夾下建立所需的 ini 檔案。
手動確認檔案
安裝完後,你可以檢查 /etc/php/8.3/mods-available/sqlite3.ini 是否已經存在。
如果檔案出現了,再執行一次 sudo phpenmod sqlite3。這時候應該就不會跳出警告訊息。
套用設定
最後一步依然是重啟網頁伺服器,讓 Apache 載入剛裝好的 SQLite 驅動。
執行 sudo systemctl restart apache2。你可以寫一個簡單的 php 檔案,內容寫 var_dump(class_exists(‘SQLite3’)); 來確認回傳是否為 true。