无法将 c:/php/php5apache2_4.dll 加载到服务器:找不到指定的模块
Cannot load c:/php/php5apache2_4.dll into server: The specified module could not be found
当尝试将 PHP 5.6.30 与 Apache 2.4 一起使用时,似乎有一个众所周知的问题(在使用 Docker 之外),但似乎没有任何真正的解决方案来解决该问题。我收到以下错误:
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.
检查 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 位)并确保版本是线程安全的,它们是。在这里,在我的 Docker 文件中,您可以看到 Apache 的 64 位线程安全版本和 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
[=31=开头的行]) 是导致容器启动时在 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 之外,还有其他方法可以解决此问题吗?
您将需要安装 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>
我遇到了同样的错误,并尝试了很多方法来纠正这个问题,但我最后尝试的方法现在成功了。
代码如下:
<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>
在多次故障排除和安装几个 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
注意路径中的“\”不是“/”!
当尝试将 PHP 5.6.30 与 Apache 2.4 一起使用时,似乎有一个众所周知的问题(在使用 Docker 之外),但似乎没有任何真正的解决方案来解决该问题。我收到以下错误:
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.
检查 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 位)并确保版本是线程安全的,它们是。在这里,在我的 Docker 文件中,您可以看到 Apache 的 64 位线程安全版本和 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
[=31=开头的行]) 是导致容器启动时在 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 之外,还有其他方法可以解决此问题吗?
您将需要安装 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>
我遇到了同样的错误,并尝试了很多方法来纠正这个问题,但我最后尝试的方法现在成功了。
代码如下:
<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>
在多次故障排除和安装几个 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
注意路径中的“\”不是“/”!