Apache2.4無法啟動和PHP沒有加載擴展到的解決方法
● Apache2.4無法啟動
●● 症狀:
雙擊 httpd.exe 正常,但是以服務方式無法啟動,報錯如下
> net start apache2.4 Apache2.4 服務正在啟動 . Apache2.4 服務無法啟動。 發生服務特定錯誤: 1. 請鍵入 NET HELPMSG 3547 以獲得更多的幫助。
●● 解決過程
查看 apache2.4\logs\error.log 只提示 Apache2.4 收到一個 Received shutdown signal ,再無任何可用信息。
由於以服務方式啟動,windows一定有日志記錄,於是打開 ”事件管理器“ ,確實看到“錯誤”記錄
Apache2.4 服務由於下列服務特定錯誤而終止:
函數不正確。
The Apache service named reported the following error:
>>> httpd.exe: Syntax error on line 78 of D:/WEBSERV/Apache24/conf/httpd.conf:
Cannot load modules/mod_perl.so into server: \xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\xa8\xb5\xc4\xc4\xa3\xbf\xe9\xa1\xa3 .
於是 在 httpd.conf 中注銷了 mod_perl
# LoadModule perl_module modules/mod_perl.so
net stop Apache2.4 sc delete Apache2.4 D:\WEBSERV\Apache24\bin\httpd -k install net start Apache2.4
Apache2.4 啟動成功。
●● 總結
1. 以上報錯是由於APACHE找不到相關模塊的DLL
比如沒有安裝對應的VC庫,或者是模塊專用的DLL文件沒有加載,這個DLL文件一般放置於Apache24/bin 目錄,
需要把 perl 加載到系統 path 環境變量中,這樣 MOD_perl 就能找到相應的 dll 了
2. Apache2.4 無法啟動聽說還有可能是由於 80 端口被占用,啟用了 LMHOSTS 等原因
端口是否占用 netstat -ano|findstr "80"
在 INTERNET 設置中,將啟用LMHOSTS前面的對號給去掉
●當解決了無法啟動 Apache2.4 的問題之后,PHP又出了問題,真是按下葫蘆浮起瓢。
●● 症狀:
在運行一個腳本時報錯
Warning: file_get_contents(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP?
●● 解決過程
這明顯是openssl的問題,查看 phpinfo() 之后,發現沒有加載 OPENSSL擴展
首先 php.ini是開啟了OPENSSL的 , 用 php -m 指令查看確實有加載OPENSSL
那問題來了, 在Apache2.4和php的關聯設置中,導致找不到PHp的擴展模塊或者模塊報錯沒有被加載
1. 相關的DLL文件沒有加載
在php目錄拷貝相關的 DLL 文件到 Apache24\bin\ 目錄,
然后在 httpd.conf 或者相關的Apache的的配置文件中加入 LoadFile "D:\WEBSERV\Apache24\libssh2.dll
上面的這個DLL位於 http://windows.php.net/downloads/pecl/releases/ssh2/0.12/
2. php.ini的 ext 指向錯誤,導致一些擴展沒有加載。
如果php單獨可以使用,但是關聯到APACHE中就找不到擴展模塊,一般是由於 php.ini的 ext和 Apache中配置的ext參數不統一導致的。
本次在 php.ini中重新配置了ext后,重啟一切正常。
● 附帶Windows事件查看器的應用
打開 控制面板\所有控制面板項\管理工具\事件查看器
或者 按下 win+r 的運行對話框中輸入 eventvwr.msc 按回車鍵打開事件查看器
在 事件查看器\Windows 日志\應用程序 中的最上面找到“錯誤”信息,如果正在調試Apache ,這個錯誤就是它的
為了醒目,按下最右側的“清除日志”,把所有的日志都清除了,然后再次打開 事件查看器,當前應用程序的”錯誤“ 更醒目。