win環境php7.2無法加載curl,openssl的問題解決方法

1.執行php -m時,openssl顯示已經加載,如圖:

在這裏插入圖片描述
在php.ini中已經開啓這個模塊
在這裏插入圖片描述

2.但是在實際使用curl或者openssl相關函數時,卻提示沒有這種函數,直接報錯

Call to undefined function openssl_pkey_get_private()
在這裏插入圖片描述

3.解決辦法

3.1建一個test.php執行var_dump(get_loaded_extensions());首先看看實際的加載情況,看到openssl和curl實際上都沒有加載進來

在這裏插入圖片描述

3.2 無法加載openssl的解決辦法

1、正確安裝VC庫。

2、php7.1版本安裝目錄中的 libeay32.dlllibssh2.dll 變爲了php7.2版本安裝目錄中的libcrypto-1_1-x64.dlllibssl-1_1-x64.dll

3、查看apache安裝目錄下的bin文件夾,看是否有libcrypto-1_1-x64.dlllibssl-1_1-x64.dll 兩個文件,如果沒有需要把php7.2版本安裝目錄中的libcrypto-1_1-x64.dlllibssl-1_1-x64.dll複製到apache的bin目錄下。

作者:大王頂
鏈接:https://www.jianshu.com/p/5a3d2804031d
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

3.3 無法加載curl的解決辦法

通常,這是Apache和PHP之間的OpenSSL版本不匹配錯誤。如果Apache將PHP作爲DSO模塊加載,則將使用其自己的OpenSSL版本(dll和libs)。因此,如果PHP擴展需要較新的版本,則它可能無法在Apache加載的DLLS中找到適當的接口,並且將無法正常工作。

由於需要加載PHP擴展,因此需要相關的DLL文件至少是PHP模塊要求的版本。假設您正在爲Apache和PHP使用最新的版本,並且都使用相同的MVC版本構建,則可以

複製以下文件:

libcrypto-1_1.dll
libcrypto-1_1-x64.dll
libcurl.dll
libsasl.dll
libssh2.dll
libssl-1_1.dll
libssl-1_1-x64.dll
nghttp2.dll
libeay32.dll(如果您的PHP發行版中存在)
ssleay32.dll(如果您的PHP發行版中存在)

從PHP根文件夾到Apache2 / bin文件夾,重啓Apache即可

以防萬一您確信PHP構建比Apache構建新。

在相反的情況下,您可以將相同的文件從Apache BIN複製到PHP根目錄。

無論如何,請事先備份APache和PHP文件夾的內容。

將PHP路徑添加爲環境變量將優先使用該路徑來加載相關DLL,並且可以解決該問題。但是,您將失去服務器的可移植性。此外,如果您還添加了Apache PATH作爲變量,並且OpenSSL版本有所不同(最多加載不同的鏈接DLL文件),則可能會發生很多問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章