При попытке использовать PHP 5.6.30 с Apache 2.4, кажется, существует довольно известная проблема (за исключением использования Docker), но, похоже, нет реального решения для ее устранения. Я получаю следующую ошибку:
httpd.exe: синтаксическая ошибка в строке 534 файла C: /Apache24/conf/httpd.conf: невозможно загрузить файл 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
это ответ говорит об использовании той же самой битовой версии (я использую 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, есть ли другой способ исправить проблему?
Вам нужно будет установить предыдущие версии распространяемого VC, так как более поздние версии не охватывают более ранние. Версия, использованная для компиляции, должна быть указана на зеркале, с которого вы ее загрузили. Страница загрузки Windows на официальном сайте PHP указано, что использовался 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>