[英]Curl Calls are not working on Apache/PHP
我的curl調用未在Apache / PHP上啟用。 我的PHP版本是5.6.3(x32),Apache是2.4
我已經取消注釋在C:/PHP/php.ini中啟用curl的行:
extension=php_curl.dll
另外,我確保在路徑變量中同時包含PHP路徑和PHP ext路徑,以便同時啟用PHP文檔中指定的ssleay32.dll
和libeay32.dll
。 這是路徑:
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\TortoiseSVN\bin;C:\PHP;C:\PHP\ext;C:\Apache24\bin;C:\xampp\apache\bin;C:\Ruby193\bin;C:\xampp\apache\bin"
但是,多次重啟后,我仍然在日志中收到此錯誤:
PHP Fatal error: Call to undefined function curl_init() in C:\\Apache24\\htdocs\\user\\newapi\\test.php on line 5, referer: http://localhost/newapi/
我知道這很明顯,但是首先要檢查的是PHP配置,請確保curl不在任何一個中:
disable_functions=
disable_classes=
在檢查php設置時,請確保您具有(基於您的路徑):
extension_dir="C:\PHP\ext"
再次(再次)驗證C:\\ PHP \\ ext \\ php_curl.dll實際上存在,並且不只是從XAMPP安裝中復制而來。
之后,根據啟動Apache的方式(使用系統帳戶或作為用戶的服務),除系統路徑外,您可能還需要檢查用戶路徑。
在某個時間點,我發現我有ssleay32.dll和libeay32.dll的多個副本,這些副本在PHP二進制文件引起版本沖突之前被稱為。 我在下面提供了一個遇到麻煩的示例。
要查看正在使用的完整路徑(假設正在從用戶空間運行Apache):
C:\> echo %PATH%
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\curl;C:\Program Files\curl\dlls;C:\Web\php;C:\Python27;
在這台機器上,這些條目來自我的用戶路徑,而不是系統路徑:
C:\Program Files\curl;C:\Program Files\curl\dlls;C:\Web\php;C:\Python27;
要檢查路徑中已安裝文件的位置:
C:\> where ssleay32.dll
C:\Program Files\curl\dlls\ssleay32.dll
C:\Web\php\ssleay32.dll
C:\>
在此示例中,我的curl和php構建所包含的dll之間的距離足夠遠,以至於彼此不兼容。 PHP試圖加載curl的dll,但是失敗了。 我沒有安裝它,所以現在無法檢查,但是TortoiseSVN可能包括它們。
可能還需要驗證文件的權限:
C:\> cacls c:\Web\php\ssleay32.dll
C:\Web\php\ssleay32.dll BUILTIN\Administrators:(ID)F
NT AUTHORITY\SYSTEM:(ID)F
BUILTIN\Users:(ID)R
NT AUTHORITY\Authenticated Users:(ID)C
附帶說明,將文件復制到%SystemDrive%\\ Windows \\ System32是一個壞主意。 從本質上講,只是將所有文件放入系統路徑(處於優先位置)而無需向用戶解釋如何編輯路徑變量的黑客。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.