ThinkPHP的調試模式是定位問題的基礎,開啟后系統會顯示詳細錯誤信息(如語法錯誤、數據庫連接失敗等)。在Debian環境中,可通過以下兩種方式開啟:
config/app.php(部分版本為config.php),將'app_debug'設置為true(如'app_debug' => true,)。.env文件,添加APP_DEBUG=true(此方式會覆蓋配置文件中的設置,更適合環境隔離)。ThinkPHP提供了一系列內置函數和功能,輔助快速調試:
dump($variable, true, '標簽', true)函數輸出變量內容(第一個參數為變量,第二個參數true表示返回而非直接輸出,第三個參數為標簽,第四個參數true表示顯示類型)。debug_start('label')和debug_end('label')記錄代碼段的運行時間及內存占用(如debug_start('query_time')…debug_end('query_time')),幫助定位性能瓶頸。'SHOW_PAGE_TRACE' => true(在配置文件中),頁面底部會顯示Trace信息(包括請求參數、SQL語句、加載文件等),無需修改代碼即可查看流程。Xdebug是PHP專業調試工具,支持斷點調試、變量監視、堆棧跟蹤等功能,配合IDE(如PhpStorm、VSCode)使用效果最佳:
sudo apt install php-xdebug(根據PHP版本調整,如php7.4-xdebug)。/etc/php/{version}/fpm/php.ini(PHP-FPM)或/etc/php/{version}/cli/php.ini(命令行),添加以下配置:zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9003 # 注意:PHP 8+默認端口為9003
xdebug.remote_autostart=1
xdebug.idekey=PHPSTORM # IDE標識,需與IDE設置一致
Settings > PHP > Servers,添加服務器(名稱任意,主機為127.0.0.1,端口為80/443,勾選“Use path mappings”并將項目目錄映射到服務器目錄);然后進入Run > Edit Configurations,添加“PHP Remote Debug”配置,選擇對應的服務器即可。ThinkPHP的日志系統可將錯誤信息、SQL語句、調試信息保存到文件,便于后續分析:
config/log.php中設置'level' => ['error', 'sql', 'debug'](記錄錯誤、SQL、調試信息),或通過.env文件設置LOG_LEVEL=error,sql,debug。\think\Log::record('自定義日志信息', 'debug')手動記錄日志(如記錄關鍵業務邏輯的執行結果)。runtime/log目錄下(如runtime/log/202509/25.log),通過tail -f runtime/log/202509/25.log實時查看最新日志,或在Debian終端直接打開文件查看。Debian環境下,可通過命令行快速運行ThinkPHP項目并查看輸出:
php think run(ThinkPHP 6+)或php -S localhost:8000 -t public(舊版本),終端會輸出請求的詳細信息(如路由匹配、控制器執行、SQL執行),便于調試路由或控制器問題。php think clear清除緩存(解決緩存導致的配置不生效問題),php think optimize:autoload優化自動加載(解決類找不到的問題),php think tinker進入交互式命令行(測試模型、數據庫查詢等)。若項目無法訪問或出現502、404等錯誤,需檢查Web服務器(Nginx/Apache)的錯誤日志:
/var/log/nginx/error.log,使用tail -f /var/log/nginx/error.log實時查看錯誤信息(如PHP-FPM未運行、fastcgi_pass路徑錯誤)。/var/log/apache2/error.log,使用tail -f /var/log/apache2/error.log查看(如mod_rewrite未啟用、權限問題)。APP_DEBUG設置為false,并限制.env文件的訪問權限(chmod 600 .env)。sudo chown -R www-data:www-data /path/to/project,sudo chmod -R 755 /path/to/project),避免因權限問題導致日志無法寫入或文件無法訪問。