Apache的許多外掛功能是通過模塊實(shí)現(xiàn)的,比如php、subversion等,安裝這些功能時(shí)就需要向Apache中添加模塊。看似很簡(jiǎn)單,向 httpd.conf 中添加下面這一行(以php為例):
LoadModule php5_module "php-5.1.2/php5apache2.dll"但是試圖重新啟動(dòng)Apache時(shí)卻往往不能成功。在事件查看器中可以看到,Apache無法找到指定的模塊(php-5.1.2/php5apache2.dll)。可是明明這個(gè)文件好好地在那里,為什么?
原來是系統(tǒng)找不到該模塊所需的 dll 文件,而造成啟動(dòng)失敗,Apache在報(bào)告錯(cuò)誤時(shí)簡(jiǎn)單地報(bào)告為模塊找不到。
那么如何判斷該模塊需要哪些dll才能執(zhí)行?一般來說,模塊所需的dll都飽含在該模塊的軟件包中,例如上述 php5apache2.dll 所需的 php5ts.dll 就包含在php的發(fā)行包中,并與php5apache2.dll位于同一目錄下。如果你安裝了 Microsoft Visual C++ 6.0,其中附帶的一個(gè)工具Dependency Walker可以精確地告訴你模塊需要什么 dll。用Dependency Walker打開php5apache2.dll,可以看到該模塊需要以下的 dll:php5ts.dll,libhttpd.dll,libapr.dll,libaprutil.dll,msvcrt.dll,kernel32.dll。其中 msvcrt.dll 和 kernel32.dll 是系統(tǒng)文件,libxxx.dll 是 apache 自帶的 dll 文件。
確定了模塊需要哪些dll之后,下一步就是讓系統(tǒng)找到這些dll。Apache啟動(dòng)時(shí),它會(huì)在Apache.exe所在目錄(一般是 C:Program FilesApache GroupApache2bin)和系統(tǒng)的 %PATH% 變量中尋找dll。所以最簡(jiǎn)單的方法就是將模塊所需的 dll 文件復(fù)制到 Apache.exe 所在目錄下,或者復(fù)制到 C:Windowssystem32 下。這樣Apache就可以正常加載該模塊了。
另外一個(gè)方法就是修改%PATH%環(huán)境變量,使之包含模塊所需dll所在的目錄。在上面的例子里,假設(shè)php安裝在 C:php 下,那么向 %PATH% 中添加 C:php,Apache即可正常加載php模塊了。但是,如果你的Apache是通過系統(tǒng)服務(wù)啟動(dòng)的話,那么修改完環(huán)境變量之后必須重新啟動(dòng)計(jì)算機(jī)才能正常啟動(dòng)Apache服務(wù)。