解決php7無法載入curl的問題及反思

2020-07-16 10:06:10
本篇文章主要給大家介紹解決php7無法載入curl的問題及反思,希望對需要的朋友有所幫助!

為了快速救火先貼出解決辦法:

#在apache 的主組態檔httpd.conf中加入
LoadFile "E:myServerphplibssh2.dll"

最近對PHP環境搭建設定做了一些創新的嘗試,目的就是要最大限度讓系統各部分更加乾淨,獨立的apache、php、mysql,除此之外不需要更多。

在PHP組態檔中是可以使用相對路徑的,可網際網路上你能看到的教學全部是寫絕對路徑,例如D:pathphpext,現在不用了

#第732行 php.ini 7.2.3
extension_dir = "..phpext"

在apache中的設定是可以動態引入的

Include conf/user.conf
Include conf/codenight/*.conf

甚至可以使用變數

Define ROOT "E:myServer"
Define SRV_ROOT "${ROOT}/Apache24"

以上可以解決非常多的設定問題,關於PHP環境搭建設定優化,在今天的和以前的推播中有詳細說明,這裡不展開。

設定優化後,PHP所有的模組都能如期載入,完美。

不不不,php_curl不行,這是apache告訴我們的

#在..Apache24logs中我們發現僅有的一條警告
PHP Warning:  PHP Startup: Unable to load dynamic library 'curl' 
(tried: ..phpextcurl (xefxbfxbdxd2xb2xefxbfxbdxefxbfxbdxefxbfxbdxd6xb8xefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxc4xa3xefxbfxbdxe9xa1xa3), ..phpextphp_curl.dll (xefxbfxbdxd2xb2xefxbfxbdxefxbfxbdxefxbfxbdxd6xb8xefxbfxbdxefxbfxbdxefxbfxbdxefxbfxbdxc4xa3xefxbfxbdxe9xa1xa3)) in Unknown on line 0

那PHP的curl模組是用不了了,我們測試了

Fatal error: Uncaught Error: Call to undefined function curl_init()

emmmmm?

出了這個模組無法載入的問題,開始我懷疑是不是../php/ext的相對路徑不能這樣寫,但其他模組mysqli,mbstring都沒有問題,排除

百度搜尋一波

Q: PHP Startup: Unable to load dynamic library 'curl'

不是想要的答案,換一種方式

Q: php7不能使用curl

A1:簡單粗暴往httpd.conf塞四條語句

LoadFile D:/php/php7.1/php7ts.dll  
LoadFile D:/php/php7.1/libeay32.dll  
LoadFile D:/php/php7.1/ssleay32.dll  
LoadFile D:/php/php7.1/libssh2.dll

A2:其實只用載入一個即可

最終的解決方式是在php官網上搜尋curl,然後看下面的英文評論.
Move to Windowssystem32 folder:
libssh2.dll, php_curl.dll, ssleay32.dll, libeay32.dll
Move to Apache24bin folder
libssh2.dll 
我自己只是把libssh2.dll 這個檔案放到Apache24bin終於中解決。

以上這兩種方法都能生效,但第一種胡亂載入無關模組太多,其實後患無窮;第二種就要好得多,有思考和嘗試。第二種方法提到的是把PHP目錄下的一個檔案libssh2.dll放到apache目錄下,但移動檔案也不符合最小改動原則,這個還可以改進一下。

我們採用第三種動態載入的辦法,通過在載入curl之前引入libssh2.dll即可,同時根據我們設定優化的結構,只用放到獨立的php7.conf檔案中,也不必修改httpd.conf

第一行是我們加入的,這樣的好處是PHP的設定在單獨的檔案,不干擾apache主組態檔

#..myServerApache24confcodenightphp7.conf
#以支援curl
LoadFile "${PHP_ROOT}/libssh2.dll"
 
LoadModule php7_module "${PHP_ROOT}/php7apache2_4.dll"
AddHandler application/x-httpd-php .php
# 設定 php.ini所在路徑
PHPIniDir "${PHP_ROOT}"

結語

對於剛學PHP的初學者,整合環境例如wampServer、phpStudy、Xammp確實很爽,但需要警惕所有技術上的便捷偷懶是把雙刃劍,開始的捷徑可能演變為荊棘之路,帶來刺痛、麻痺了一些初學者無限膨脹。學習需要踏實的去探求一些本質的東西。學習程式設計就是求真的過程。

最近一直在折騰環境的事,就是為了能擺脫對整合環境的依賴,去創造去發現,還原一條簡單純粹的路,看清它原來的樣子。

有時候是你的固執會讓你成長,心守原力,手握神兵。

以上就是解決php7無法載入curl的問題及反思的詳細內容,更多請關注TW511.COM其它相關文章!