无法将c:/php/php5apache2_4.dll加载到服务器中:找不到指定的模块

When trying to use PHP 5.6.30 with Apache 2.4 there seems to be a somewhat well-known issue (outside of using Docker) but there does not seem to be any real solution for fixing the issue. I am getting the following error:

httpd.exe: Syntax error on line 534 of C:/Apache24/conf/httpd.conf: Cannot load c:/php/php5apache2_4.dll into server: The specified module could not be found.

Examining the directory of C:\php (inside the Docker container) I see the DLL is clearly there

03/09/2017  04:34 PM    <DIR>          .
03/09/2017  04:34 PM    <DIR>          ..
01/18/2017  08:12 PM            69,632 deplister.exe
03/09/2017  04:34 PM    <DIR>          dev
03/09/2017  04:34 PM    <DIR>          ext
03/09/2017  04:34 PM    <DIR>          extras
01/18/2017  08:12 PM         1,290,752 glib-2.dll
01/18/2017  08:12 PM            16,384 gmodule-2.dll
01/18/2017  08:12 PM        25,672,192 icudt57.dll
01/18/2017  08:12 PM         2,065,920 icuin57.dll
01/18/2017  08:12 PM            51,200 icuio57.dll
01/18/2017  08:12 PM           257,536 icule57.dll
01/18/2017  08:12 PM            50,176 iculx57.dll
01/18/2017  08:12 PM            63,488 icutest57.dll
01/18/2017  08:12 PM           196,096 icutu57.dll
01/18/2017  08:12 PM         1,456,128 icuuc57.dll
01/18/2017  08:12 PM            79,408 install.txt
03/09/2017  04:34 PM    <DIR>          lib
01/18/2017  08:12 PM         2,244,096 libeay32.dll
01/18/2017  08:12 PM            46,592 libenchant.dll
01/18/2017  08:12 PM           185,344 libpq.dll
01/18/2017  08:12 PM           237,056 libsasl.dll
01/18/2017  08:12 PM           213,504 libssh2.dll
01/18/2017  08:12 PM             3,286 license.txt
01/18/2017  08:12 PM           557,659 news.txt
01/18/2017  08:12 PM                43 phar.phar.bat
01/18/2017  08:12 PM            53,242 pharcommand.phar
01/18/2017  08:12 PM            59,392 php-cgi.exe
01/18/2017  08:12 PM            32,256 php-win.exe
01/18/2017  08:12 PM            79,872 php.exe
01/18/2017  08:12 PM             2,523 php.gif
01/18/2017  08:12 PM            75,684 php.ini-development
01/18/2017  08:12 PM            75,715 php.ini-production
01/18/2017  08:12 PM            32,768 php5apache2_4.dll <--- look right here
01/18/2017  08:12 PM           846,630 php5embed.lib
01/18/2017  08:12 PM           168,960 php5phpdbg.dll
01/18/2017  08:12 PM         8,343,040 php5ts.dll
01/18/2017  08:12 PM           181,760 phpdbg.exe
01/18/2017  08:12 PM            21,360 readme-redist-bins.txt
01/18/2017  08:12 PM             3,634 snapshot.txt
01/18/2017  08:12 PM           353,792 ssleay32.dll
              35 File(s)     45,087,120 bytes

This answer talks about making sure to use the same bit version (I am using 64 bit) and to also make sure the versions are thread safe, which they are. Here, in my Dockerfile, you can see the links to the 64 bit thread-safe versions of Apache and PHP:

FROM microsoft/windowsservercore

RUN powershell -Command \
    $ErrorActionPreference = 'Stop'; \
    Invoke-WebRequest -Method Get -Uri https://www.apachelounge.com/download/VC11/binaries/httpd-2.4.25-win64-VC11.zip -OutFile c:\apache.zip ; \
    Expand-Archive -Path c:\apache.zip -DestinationPath c:\ ; \
    Remove-Item c:\apache.zip -Force

RUN powershell -Command \
    $ErrorActionPreference = 'Stop'; \
    Invoke-WebRequest -Method Get -Uri "http://download.microsoft.com/download/9/3/F/93FCF1E7-E6A4-478B-96E7-D4B285925B00/vc_redist.x64.exe" -OutFile c:\vcredist_x64.exe ; \
    start-Process c:\vcredist_x64.exe -ArgumentList '/quiet' -Wait ; \
    Remove-Item c:\vcredist_x64.exe -Force

RUN powershell -Command \
    $ErrorActionPreference = 'Stop'; \
    Invoke-WebRequest -Method Get -Uri http://windows.php.net/downloads/releases/php-5.6.30-Win32-VC11-x64.zip -OutFile c:\php.zip ; \
    Expand-Archive -Path c:\php.zip -DestinationPath c:\php ; \
    Remove-Item c:\php.zip -Force

RUN powershell -Command \
    $ErrorActionPreference = 'Stop'; \
    Remove-Item c:\Apache24\conf\httpd.conf ; \
    new-item -Type Directory c:\www -Force ; \
    Add-Content -Value "'<?php phpinfo() ?>'" -Path c:\www\index.php

ADD httpd.conf /apache24/conf

WORKDIR /Apache24/bin

CMD /Apache24/bin/httpd.exe -w

Note the Visual Studio compiler is for 2015. Do I really need to level the playing field for using the compiler?

Finally, the following lines in the httpd.conf (line 534, mentioned in the error, is the line starting with LoadModule)are what is causing the error to show in the Docker logs for the container when started. I have them commented out at the moment so I could get Apache to start as a stand-alone (allowing me to examine what is going on inside of the container).

# configure the path to php.ini
# PHPIniDir "C:/php"
# LoadModule php5_module "c:/php/php5apache2_4.dll"
# AddHandler application/x-httpd-php .php

I plan to deploy some existing PHP code in the container and do not want to upgrade to PHP7 (which will create more work to fix some things with code which will fail on PHP7). Outside of upgrading to PHP 7 is there any other way to fix the issue?

dta43039
dta43039 好的-必须回到VC2012可再发行组件,但这有效。
3 年多之前 回复
dongqiabei7682
dongqiabei7682 可再发行组件不一定涵盖以前的版本。您可能还需要安装2014年可再发行组件。
3 年多之前 回复
dshkmamau65777662
dshkmamau65777662 我安装了VS2015可再发行组件。
3 年多之前 回复
douchanxiu5636
douchanxiu5636 我知道,这就是我没有把它作为答案发布的原因。您是否安装了VC2014可再发行组件?
3 年多之前 回复
dqr3883
dqr3883 我会做@DissidentRage,但它仍然会在LoadModule上失败
3 年多之前 回复
douer9399
douer9399 您应该首先放入LoadModule并将其他两个配置包装在IfModule中,因为它会加载必要的PHPIniDir指令。
3 年多之前 回复

2个回答

You will need to install prior versions of the VC Redistributable since later versions do not cover earlier ones. The version used to compile it should be indicated on the mirror you downloaded it from. The Windows download page on the official PHP site indicates 2014 was used but you may have luck with 2012 as well.

You should also set up your configuration as such:

LoadModule php5_module "c:/php/php5apache2_4.dll"

<IfModule php5_module>
    # configure the path to php.ini
    PHPIniDir "C:/php"
    AddHandler application/x-httpd-php .php
</IfModule>

I had the same error and have tried many means to correct the issue but the last one I tried, now worked.

Below is the code:

<IfModule php5_module>
   LoadModule php5_module "c:/php/php5apache2_4.dll"
   # configure the path to php.ini
   PHPIniDir "C:/php"
   AddHandler application/x-httpd-php .php
</IfModule>
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问