Windows 下運行 `php.exe` 提示 無法找到 php_mbstring.dll 或啟動失敗,通常是 php.ini 中擴展加載順序錯誤、extension_dir 路徑不對、或 DLL 文件缺失。本文給出標準排查步驟與修正配置。
打開 `php.ini`,找到擴展區塊(`;extension=...`),確保順序:
; ✅ 正確順序:mbstring 在 exif 之前
extension=php_mbstring.dll
extension=php_exif.dll
; ❌ 錯誤順序:exif 在 mbstring 之前會導致 exif 初始化失敗
; extension=php_exif.dll
; extension=php_mbstring.dll
原理:PHP 啟動時按順序加載擴展,`exif` 模塊初始化時會調用 `mbstring` 的函數,若 `mbstring` 尚未加載,會報錯或導致後續擴展載入失敗。
; ❌ 相對路徑 ./ 在 CLI 下工作目錄不固定,易失效
extension_dir = "./"
; ✅ 絕對路徑或相對 PHP 目錄的 ext 子目錄
extension_dir = "ext"
; 或
extension_dir = "C:/php/ext"
; 或 Linux/Mac
extension_dir = "/usr/lib/php/extensions/no-debug-non-zts-20210902"
修改後**必須重啟 PHP 進程**(CLI 重新運行、PHP-FPM `systemctl reload php-fpm`、Apache `systemctl reload httpd`)。
非 Windows 系統無 DLL,若缺 mbstring:
# Ubuntu/Debian
sudo apt-get install php-mbstring
sudo systemctl reload php-fpm
# CentOS/RHEL
sudo yum install php-mbstring
sudo systemctl reload php-fpm
# macOS (Homebrew)
brew install php@8.2 # 已包含 mbstring
# 或單獨安裝擴展(pecl)
pecl install mbstring
<?php
// test_mbstring.php
if (!extension_loaded('mbstring')) {
die("❌ mbstring 未加載\n");
}
echo "✅ mbstring 版本: " . phpversion('mbstring') . "\n";
echo "測試 mb_strlen: " . mb_strlen("測試", 'UTF-8') . "\n"; // 應輸出 2
?>
運行 `php test_mbstring.php` 確認無誤。