在 Windows 環境下,PHP 5.6.11 已在 php.ini 啟用 extension=php_curl.dll,IIS 運行正常,但 Apache (httpd) 啟動後 phpinfo() 完全看不到 curl 區塊,cURL 相關函數呼叫無反應、不報錯。
PHPRC、Path 指向 PHP 目錄。php_curl.dll 複製到 Apache 的 bin 目錄。bin 目錄已存在 libeay32.dll、ssleay32.dll(OpenSSL 相依)。將 PHP 根目錄下的 libssh2.dll 複製到 Apache 的 bin 目錄,重啟 Apache 即可。
PHP 5.6 的 php_curl.dll 依賴 libssh2.dll(支援 SCP/SFTP 協定)。IIS 以模組/ISAPI 方式載入 PHP,會自動搜尋 PHP 目錄下的 DLL;Apache 載入 php5apache2_4.dll 時,工作目錄為 Apache 的 bin 目錄,系統預設 DLL 搜尋順序不會自動查找 PHP 目錄,導致 libssh2.dll 找不到,進而造成 php_curl.dll 靜默載入失敗(不報錯、不顯示於 phpinfo)。
libssh2.dll。bin 資料夾(與 httpd.exe 同層)。phpinfo() 確認 curl 區塊出現,版本資訊正常。Linux 下通常透過套件管理器安裝 php-curl(如 apt-get install php5.6-curl 或 yum install php-curl),會自動處理相依庫(libcurl、libssh2 等),無需手動複製檔案。
Windows + Apache + PHP 5.6 環境下,php_curl.dll 需要 libssh2.dll 置於 Apache bin 目錄才能正常載入。這是因為 Apache 的工作目錄機制導致 DLL 搜尋路徑不包含 PHP 目錄。記住這一招,未來升級 PHP 版本時同理可解決類似「擴展啟用了但 phpinfo 不顯示」的問題。