无法将 c:/php/php5apache2_4.dll 加载到服务器:找不到指定的模块
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/42724185/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Cannot load c:/php/php5apache2_4.dll into server: The specified module could not be found
提问by Jay Blanchard
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:
当尝试将 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.
httpd.exe:C:/Apache24/conf/httpd.conf 的第 534 行语法错误:无法将 c:/php/php5apache2_4.dll 加载到服务器:找不到指定的模块。
Examining the directory of C:\php (inside the Docker container) I see the DLL is clearly there
检查 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
This answertalks 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:
这个答案谈到确保使用相同的位版本(我使用的是 64 位)并确保版本是线程安全的,它们是。在这里,在我的 Dockerfile 中,您可以看到 Apache 和 PHP 的 64 位线程安全版本的链接:
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?
请注意,Visual Studio 编译器适用于 2015 年。我真的需要为使用编译器设置公平的竞争环境吗?
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).
最后,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
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?
我计划在容器中部署一些现有的 PHP 代码,并且不想升级到 PHP7(这将创建更多的工作来修复一些在 PHP7 上会失败的代码)。除了升级到 PHP 7 之外,还有其他方法可以解决这个问题吗?
回答by Dissident Rage
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 pageon the official PHP site indicates 2014 was used but you may have luck with 2012 as well.
您将需要安装 VC Redistributable 的早期版本,因为更高版本不包括早期版本。用于编译它的版本应在您下载它的镜像上标明。在Windows下载页面上的官方PHP站点指示已使用2014,但你可能有运气与2012为好。
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>
回答by Folakemi Gbadamosi
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>