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

时间:2017-03-10 17:19:56

标签: php apache docker windows-server-2016

当尝试在Apache 2.4中使用PHP 5.6.30时,似乎有一个众所周知的问题(在使用Docker之外),但似乎没有任何真正的解决方案来解决问题。我收到以下错误:

  

httpd.exe:C:/Apache24 / conf / httpd.conf的第534行语法错误:无法将c:/php/php5apache2_4.dll加载到服务器:找不到指定的模块。

检查C:\ php目录(在Docker容器内)我看到DLL显然在那里

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

这个answer讨论了确保使用相同的位版本(我使用64位)并确保版本是线程安全的,它们是。在我的Dockerfile中,您可以看到指向64位线程安全版本的Apache和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

请注意,Visual Studio编译器适用于2015年。我是否真的需要使用编译器来平衡游戏区域?

最后,httpd.conf中的以下几行( 第534行,在错误中提到,是以LoadModule 开头的行)是什么启动时导致错误在Docker日志中显示容器。我现在已将它们注释掉,所以我可以让Apache作为一个独立的开始(允许我检查容器内部的内容)。

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

我计划在容器中部署一些现有的PHP代码,并且不想升级到PHP7(这将创建更多的工作来修复一些代码,这些代码将在PHP7上失败)。升级到PHP 7之外还有其他方法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

您需要安装VC Redistributable的早期版本,因为以后的版本不包含早期版本。用于编译它的版本应该在您从中下载的镜像上指示。官方PHP站点上的Windows download page表示使用了2014年,但您也可以在2012年获得好运。

您还应该如下设置配置:

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>

答案 1 :(得分:0)

我也遇到了同样的错误,并且尝试了多种方法来纠正此问题,但是我上次尝试的方法现在可以了。

下面是代码:

<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>

答案 2 :(得分:0)

在对一些VC ++可再发行文件进行了几次故障排除和安装之后,下面的代码为我工作了,但没有成功。我使用的是php 5.6.40和Apache 2.4.46。

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

请注意路径中的“ \”而不是“ /”!