无法将 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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-26 02:41:41  来源:igfitidea点击:

Cannot load c:/php/php5apache2_4.dll into server: The specified module could not be found

phpapachedockerwindows-server-2016

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