PHP 錯誤:Unable to load dynamic library
Unable to load dynamic library
錯誤訊息
Failed loading /usr/local/php5/lib/php/extensions/no-debug-non-zts-20160303/opcache.so: dlopen(/usr/local/php5/lib/php/extensions/no-debug-non-zts-20160303/opcache.so, 9): Symbol not found: _pcre_globals
Referenced from: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20160303/opcache.so
Expected in: flat namespace
in /usr/local/php5/lib/php/extensions/no-debug-non-zts-20160303/opcache.so
... 省略
遭遇過程:
最近將 PHP 從 PHP5.6 更新至 PHP7.1。使用 PHPStorm 要進行單元測試時,報錯了:
從錯誤訊息可看見有幾個 PHP 插件沒辦法被載入,導致我的 PHPUnit 沒辦法順利執行,並且得到一個提示訊息為:
Expected in: flat namespace
發生原因:
一番查證後,原來 Expected in: flat namespace 是 C++ 層級的錯誤例外訊息。
這段訊息會在「程式環境沒有辦法編譯插件」的時候跳出!(程式環境指的是 PHP5、PHP7、Python 等正在運行的程式。)
PHP 沒辦法順利編譯插件?但這些插件明明在啟動 Apache 時都被順利載入了,到底發生什麼事呢?
在一般情況下 PHP7.1 確實可以正常編譯這些套件,但在 PHP-CLI 模式下進行 PHPUnit 時卻又編譯失敗?這些跡象已經指出,一定是 PHP-CLI 的編譯器指錯版本了!
打開 PHPStorm > Preferences > Language & Framework > PHP,檢查 PHP-CLI 版本是否有問題:
PHP7.1 與 PHP5.6 並不相容,所以兩個版本之間的插件也沒辦法並存。
上圖的設定,會在 PHP-CLI 模式時,使用 PHP5.6 的編譯器來編譯 PHP7.1 的插件,當然會發生錯誤囉!
解決方案:變更 PHP-CLI 的編譯器
既然已經知道是 PHP 版本不相容的問題,那麼只需要替換 PHP-CLI 模式的編譯器就可以解決問題了!
步驟1. 新增 PHP-CLI 的編譯器(沒有 PHP7 編譯器才需要)
步驟2. 替換 PHP-CLI 編譯器
解決問題
當 PHP-CLI 的編譯器被替換成 PHP7.1 版本後,插件也都正常被載入了,PHPUnit 也能正常運行了!
gastliscur-ho Cesar Padilla https://wakelet.com/wake/rhnPe61qym_HY1tN9b2ff
回覆刪除limpgensoundking