Call to undefined function openssl_decrypt() 錯誤排除

當遇到 Call to undefined function openssl_decrypt() 的錯誤,表示 PHP 缺少 OpenSSL 擴展模組的支援。以下是完整的排除流程:

錯誤排除流程

1. 確認 PHP 已啟用 OpenSSL 擴展

打開 php.ini 設定檔,搜尋以下設定:

extension=openssl

請確保該行未被註解(前面沒有 ; 號),若尚未啟用請移除註解後儲存檔案。

在 Windows 系統下有時為:

extension=php_openssl.dll

2. 重啟伺服器

更改 php.ini 後,記得重啟你的 Web Server(Apache、Nginx 等) 以套用設定。

例如 Apache:

# Windows
httpd -k restart

# 或使用控制面板中的 Apache 管理工具

# Linux
sudo systemctl restart apache2

3. 確認必要 DLL 檔案(僅限 Windows)

如果你在 Windows 系統使用 Apache 或 CLI 模式,還需確認 PHP 安裝目錄下的以下 DLL 是否存在,並可正確載入:

  • libcrypto-*.dll(舊版可能為 libeay32.dll
  • libssl-*.dll(舊版可能為 ssleay32.dll

若 Apache/bin 目錄下缺少這些檔案,可從 PHP 安裝目錄中複製:

# 假設 PHP 安裝在 C:\php
copy C:\php\libcrypto-3-x64.dll C:\Apache24\bin\
copy C:\php\libssl-3-x64.dll C:\Apache24\bin\

📌 注意:自 PHP 7.4 以後,OpenSSL 使用的是 libcryptolibssl,舊版才使用 libeay32.dllssleay32.dll,請依 PHP 版本確認所需的 DLL 檔案。

4. 驗證是否成功啟用 OpenSSL 擴展

可以使用以下命令或 PHP 檔案檢查:

php -m | grep openssl

或建立 phpinfo() 頁面,確認是否載入 openssl 模組:

<?php phpinfo(); ?>

頁面中應顯示 OpenSSL support => enabled


補充說明

  • Laravel 使用 openssl_encrypt()openssl_decrypt() 實作內建的加密解密功能(如 Crypt::encrypt() / decrypt()),缺少 OpenSSL 將導致無法正常執行。
  • 部分共用主機可能未啟用此模組,部署時務必檢查伺服器支援情況。