首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP CLI 報錯「找不到 php_mbstring.dll」解決方案:擴展加載順序與目錄配置

     編輯:PHP 相關知識

Windows 下運行 `php.exe` 提示 無法找到 php_mbstring.dll 或啟動失敗,通常是 php.ini 中擴展加載順序錯誤、extension_dir 路徑不對、或 DLL 文件缺失。本文給出標準排查步驟與修正配置。

核心原因:`php_exif` 依賴 `php_mbstring`,必須先加載 mbstring

打開 `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` 尚未加載,會報錯或導致後續擴展載入失敗。

第二常見原因:`extension_dir` 路徑錯誤

; ❌ 相對路徑 ./  在 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`)。

完整排查清單

  1. 確認 DLL 文件存在:進入 `extension_dir` 目錄,驗證 `php_mbstring.dll`、`php_exif.dll` 物理存在。
  2. 檢查 php.ini 生效路徑:運行 `php --ini` 查看 `Loaded Configuration File`,確保編輯的是正確文件。
  3. 取消註釋並調整順序:去掉 `;extension=php_mbstring.dll` 前的分號,置於 `exif` 之前。
  4. 設置正確的 extension_dir:推薦用相對路徑 `ext`(PHP 目錄下)或絕對路徑。
  5. 驗證:`php -m | findstr mbstring` (Win) / `php -m | grep mbstring` (Linux) 應顯示 `mbstring`。

Linux/Mac 系統對應處理

非 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` 確認無誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved