- Как подключить PHP к Apache на Windows
- Настройка PHP в Windows
- Подключение PHP к Apache
- Настройка PHP
- Установка PHP как FastCGI под Apache (Windows 10)
- Разные версии PHP
- Apache 2.x on Microsoft Windows
- Установка PHP как обработчика под Apache
- Запуск PHP как CGI
- Запуск PHP под FastCGI
- Apache php cgi windows
- Тестирование
- Использование переменных
- User Contributed Notes 7 notes
Как подключить PHP к Apache на Windows
Начнём с того, что скачаем самую новую версию PHP для Windows с официального сайта: https://windows.php.net/download/
Там несколько вариантов, которые различаются:
- версией (например, 7.2, 7.1, 7.0, 5.6)
- битностью (64 и 32)
- Thread Safe или Non Thread Safe
Выбирайте самую последнюю версию, с той битностью, какая у вашего сервера. Т.е. если у вас Apache 64-битный, то PHP также должен быть 64-битным. Всегда выбирайте Thread Safe версию.
Для каждого файла имеется две ссылки:
Выбирайте Zip, поскольку отладочный пакет только для тех, кто действительно знает, зачем он им нужен. Здесь имеется ввиду не отладка PHP-скриптов, а отладка самого интерпретатора PHP.
Настройка PHP в Windows
Настройка выполняется в два этапа:
- подключение PHP к Apache
- изменение настроек самого PHP (какие расширения включены, сколько выделено памяти PHP скриптам и т.д.)
Подключение PHP к Apache
Для подключения PHP к Apache откройте конфигурационный файл веб-сервера, который расположен по следующему пути: Apache24\conf\httpd.conf (в папке сервера, в подпапке conf, файл httpd.conf).
В этот файл добавьте три строки, две из которых нужно откорректировать:
В первой строке вместо C:/путь/до/PHP напишите точный путь до папки, куда вы распаковали файлы PHP. В третьей строке C:/путь/до/PHP/php8apache2_4.dll также откорректируйте путь, указав расположение PHP папки.
К примеру, я распаковал PHP в папку C:/Server/bin/PHP, тогда мои настройки следующие:
Если папка PHP находится в корне диска C, тогда эти строки должны быть такими:
Чтобы изменения вступили в силу, перезапустите веб-сервер или компьютер.
Настройка PHP
В папке PHP найдите файл php.ini-development и переименуйте его в php.ini – это нужно сделать обязательно, иначе PHP не будет видеть сделанные настройки.
Открываем файл php.ini любым текстовым редактором, ищем строчку
и заменяем её на
Обратите внимание, что вам нужно скорректировать строку C:\путь\до\PHP\ext\, указав конкретный путь до папки, где размещены файлы PHP.
У PHP (как и у Apache) имеется много расширений. Если вы не знаете, какое расширение для чего нужно, то как минимум два варианта:
- начать изучить предназначение каждого расширения и подключить только те, которые вам действительно нужны;
- подключить самые важные расширения, чтобы любые сайты и движки работали без ошибок.
Чтобы подключить большую часть расширений, найдите группу строк:
и замените её на:
теперь раскомментируйте эту группу строк:
Мы подключили самые востребованные расширения, чтобы работало как можно больше функций PHP.
Установка PHP как FastCGI под Apache (Windows 10)
При установке Битрикс столкнулся с необходимостью изменять настройки PHP в файле php.ini . Например, вот эти
Но, поскольку у меня PHP установлен как модуль Apache, эти изменения затронули все виртуальные хосты. Из-за этого перестал работать phpMyAdmin. Пришлось устанавливать PHP как FastCGI, чтобы для каждого виртуального хоста был свой файл php.ini .
Интерфейс FastCGI — клиент-серверный протокол взаимодействия вебсервера и приложения, дальнейшее развитие технологии CGI. По сравнению с CGI является более производительным и безопасным.
FastCGI ликвидирует множество ограничений CGI-программ. Проблема CGI-программ в том, что они должны быть перезапущены веб-сервером при каждом запросе, что приводит к понижению производительности.
FastCGI убирает это ограничение, сохраняя процесс запущенным и передавая запросы этому постоянно запущенному процессу. Это позволяет не тратить время на запуск новых процессов.
В то время как CGI-программы взаимодействуют с сервером через STDIN и STDOUT запущенного CGI-процесса, FastCGI-процессы используют Unix Domain Sockets или TCP/IP для связи с сервером. Это значит, что FastCGI-программы могут быть запущены не только на этом же сервере, но и где угодно в сети. Также возможна обработка запросов несколькими FastCGI-процессами, работающими параллельно.
Для начала скачиваем модуль mod_fcgid с сайта apachelounge.com, распаковываем и кладем в директорию modules сервера Apache. У меня это C:/wamp/apache/modules . Далее, переходим в директорию apache/conf и вносим изменения в файл конфигурации Apache httpd.conf :
В конец файла дописываем:
Последняя директива означает, что файл php.ini расположен в директории C:/wamp/php71 . Это будет файл конфигурации PHP по умолчанию. Строки, которые отвечают за работу PHP как модуля Apache, удаляем или комментируем:
Теперь редактируем файл виртуальных хостов httpd-vhosts.conf . У меня он расположен в C:/wamp/apache/conf/extra :
Для каждого виртуального хоста добавляем одну строчку, которая переопределяет переменную среды PHPRC . После этого берем дефолтный php.ini из директории C:/wamp/php71 и копируем в директорию каждого хоста. У меня это
- D:/work/localhost
- D:/work/localhost1
- D:/work/localhost2
- D:/work/localhost3
В каждом файле php.ini находим строки
и установливаем значение doc_root :
Теперь у каждого виртуального хоста будет свой php.ini . Осталось только перезапустить Apache, чтобы изменения вступили в силу.
Разные версии PHP
Если для какого-то проекта нужно использовать другую версию PHP, вносим изменения в файл httpd-vhosts.conf
У меня PHP 5.6 установлен в директории C:/wamp/php56 , поэтому именно оттуда я взял php.ini и скопировал в D:/work/localhost4 .
Чуть позже столкнулся с ошибкой при тестировании системы в Битрикс (Настройки • Инструменты • Проверка системы):
Проверил настройки php.ini , связанные с загрузкой файлов:
Вроде все в порядке. Тогда посмотрел еще логи Apache, и там увидел ошибку:
Значение по умолчанию FcgidMaxRequestLen равно 131072 байт (128 Кб). Добавил в конец файла httpd.conf :
Этого должно быть достаточно, но есть еще и другие настройки:
Apache 2.x on Microsoft Windows
Этот раздел содержит инструкции по установке PHP для Apache 2.x на системы Microsoft Windows. Мы также имеем инструкции для пользователей Apache 1.3.x на отдельной странице.
Замечание: Поддержка Apache 2.2
Пользователям Apache 2.2 следует обратить внимание на то, что DLL файл для Apache 2.2 называется php5apache2_2.dll , а не php5apache2.dll и он доступен только для PHP 5.2.0 и более поздних версий.
Вам настоятельно рекомендуется ознакомиться с » Документацией по Apache, чтобы получить базовые знания о Apache 2.x Server. Также перед чтением данной справки обратите внимание на » Рекомендации для Windows по Apache 2.x.
Apache 2.x предназначен для работы в серверных версиях Windows, таких как Windows NT 4.0, Windows 2000, Windows XP или Windows 7. Хотя Apache 2.x может использоваться на Windows 9x, эти платформы не поддерживаются полностью, и некоторые функции не будут работать правильно. Исправление этой ситуации не планируется.
Скачайте наиболее актуальную версию » Apache 2.x и подходящую версию PHP. Следуйте Пошаговому руководству по установке и вернитесь для продолжения интеграции PHP и Apache.
Существует три пути установки PHP для Apache на Windows. Вы можете запустить PHP как обработчик, как CGI, или под FastCGI.
Замечание: Помните, что при указании путей в конфигурационных файлах Apache под Windows, все обратные слеши, например, c:\directory\file.ext должны быть изменены на прямые: c:/directory/file.ext . Для путей с директориями также может понадобиться слеш в конце.
Установка PHP как обработчика под Apache
Вам необходимо добавить следующие строки в ваш конфигурационный файл Apache httpd.conf для загрузки PHP-модуля для Apache 2.x:
Пример #1 PHP как обработчик Apache 2.x
Замечание: Не забудьте указать актуальный путь к директории PHP вместо C:/php/ в приведенном примере. Позаботьтесь, чтобы в директиве LoadModule использовались либо php5apache2.dll либо php5apache2_2.dll и удостоверьтесь, что указанный файл фактически находится по пути, который вы указали в директиве.
Приведенная выше конфигурация позволит PHP обработать любой файл, который имеет расширение .php, даже если имеются другие расширения. К примеру, файл с именем example.php.txt будет запущен обработчиком PHP. Чтобы гарантировать, что только файлы, которые имеют расширение .php будут запущены, используйте следующую конфигурацию:
Запуск PHP как CGI
Вы должны обратиться к документации » Apache CGI для более полного понимания о запуске CGI под Apache.
Для запуска PHP как CGI, вам необходимо поместить ваши php-cgi файлы в директорию, обозначенную как директория CGI, используя директиву ScriptAlilas.
После этого вам необходимо добавить строку #! в PHP файлы, указывающую на местоположение исполняемого файла PHP.
Пример #2 PHP как CGI под Apache 2.x
Используя установку CGI, ваш сервер открыт перед несколькими возможными уязвимостями. Пожалуйста, ознакомьтесь с разделом «Безопасность CGI» чтобы узнать, как можно защитить себя от таких атак.
Запуск PHP под FastCGI
Запуск PHP под FastCGI имеет ряд преимуществ по сравнению с запуском как CGI. Установка же довольно проста:
Получить mod_fcgid здесь: » http://httpd.apache.org/mod_fcgid/. исполняемые файлы под Win32 доступны для скачивания с этого сайта. Установите модуль в соответствии с прилагаемыми инструкциями.
Настроить свой веб сервер как указано ниже, позаботившись о соответствии всех путей установки на вашей конкретной системе:
Пример #3 Конфигурация Apache для запуска PHP как FastCGI
Apache php cgi windows
Используя установку CGI, ваш сервер открыт перед несколькими возможными уязвимостями. Пожалуйста, ознакомьтесь с разделом «Безопасность CGI» чтобы узнать, как можно защитить себя от таких атак.
Тестирование
Если вы собрали PHP как CGI, вы можете протестировать вашу сборку командой make test. Тестирование вашей сборки — всегда хорошая идея. Таким образом вы сможете раньше обнаружить проблемы PHP на вашей платформе, вместо того, чтобы бороться с ними позже.
Использование переменных
Некоторые переменные окружения сервера не определены в текущей » спецификации CGI/1.1. Определены только следующие переменные: AUTH_TYPE , CONTENT_LENGTH , CONTENT_TYPE , GATEWAY_INTERFACE , PATH_INFO , PATH_TRANSLATED , QUERY_STRING , REMOTE_ADDR , REMOTE_HOST , REMOTE_IDENT , REMOTE_USER , REQUEST_METHOD , SCRIPT_NAME , SERVER_NAME , SERVER_PORT , SERVER_PROTOCOL и SERVER_SOFTWARE . Все остальное должно обрабатываться как дополнительные расширения (vendor extensions).
User Contributed Notes 7 notes
additionnal information to fastcgi.
the compilation of fastcgi library is not nessesary, php include a modified version of this library,
and fastcgi module have this own implementation of the protocole fastcgi.
on the first server (where apache are!) the uid and gid of apache instance of the fastcgi module
must be the same on the php file to execute.
without that they dont work.
the module refuse to send the request to the fastcgi php server.
Have noticed on debian now, and may be true of other builds, that if you are using php as a command line language, you don’t need the -q ie: #!/usr/bin/php -q anymore.
What really took me ages to work out was how to the use php in cgi mode (ie in a cgi-bin directory) as it doesn’t send http headers by default. It also fails to populate $_GET and $_POST arrays.
Turns out debian php build comes with /usr/bin/php-cgi
Use this in your shebang if running CGI scripts!
I understand now — but had to figure this out myself!
Keywords I tried to solve this problem with were:
PHP, CGI, no $_GET array, Premature end of script headers, No http Headers, debian
Hopefully this post might save someone many hours of frustration, if they are googling the above words!
for using fastcgi external server in place of cgi or mod php with php:
to compile fastcgi librairie:
to compile the fastcgi apache module:
wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.2.tar.gz
tar xvzf mod_fastcgi-2.4.2.tar.gz
cd mod_fastcgi-2.4.2
path/to/apache/bin/apxs -i -A -n fastcgi -o mod_fastcgi.la -c *.c
after you must modify the http.conf to add that:
# load fcgi module
LoadModule fastcgi_module modules/mod_fastcgi.so
# authorization to execute fcgi on tree «/fcgi-bin/»
Options ExecCGI
SetHandler fastcgi-script
# define fastcgi external serveur for virtual path «/fcgi-bin/phpfcgi» to execute on targetmachinehost with targetport
FastCgiExternalServer /fcgi-bin/phpfcgi -host targetmachinehostname:targetport
# mime type definietion for some extention
AddType application/x-httpd-fastphp .php .cphp .php4
#define apache cgi regirection with the virtual action script /fcgi-bin/phpfcgi associated with the defined mime type.
Action application/x-httpd-fastphp /fcgi-bin/phpfcgi
compile php with —enable-cgi and —enable-fastcgi=/to/lib/fastcgi
start on target machine php with «php -b ip:port» for ear request from mod_fastcgi.
some aditional thing are in sapi/cgi/README.FastCGI of php src tree.
the document root of the apache machine must be synchronous with the php target machine. with the same tree.
and with that solution you can mixe php5 and php4 with different extention of apache directory limitation to one or another version.
with performance like mod_php!
Thanks nordkyn, this one was very helpful.
Please note that the kernel has to be compiled with misc binary support, which is activated on most distributions like Debian.
You would have to please these two lines in a script to run it after every reboot, on debian I propose /etc/init.d/bootmisc.sh
You could place this lines at the end but before : exit 0
—
# Install PHP as binary handler
mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
echo «:PHP:E::php::/usr/bin/php4:» > /proc/sys/fs/binfmt_misc/register
—
And please remember that the package management would override the file on the next distribution upgrade 🙂
Dug out from the discussion at the site below is a good tip: if you are working with an existing PHP installation which did not build either the commandline or CGI servers, you can use the lynx non-graphical web browser to get the web server to execute php scripts from the command line (or cron jobs, etc):
>If you wish to use PHP as a scripting language, a good article to read is >http://www.phpbuilder.com/columns/darrell20000319.php3
>note that the article is aimed at *nix not win32, but most of it still applies