Установка еще одной версии PHP
Предположим, на нашем сервере уже установлен PHP версии 5.4.16. Добавим PHP 5.2.17.
Устанавливаем пакеты, которые нам понадобятся для сборки интерпретатора:
yum install epel-release
yum install wget libxml2-devel openssl-devel libcurl-devel libjpeg-devel libpng-devel bzip2-devel freetype-devel aspell-devel uw-imap-devel libmcrypt-devel libmhash-devel mysql-devel postgresql-devel gcc
Создаем каталог для исходников:
mkdir /usr/local/src/php
… и перейдем в него:
cd /usr/local/src/php
Переходим на страницу museum.php.net/php5 и копируем ссылку на нужную версию PHP:
* в нашем примере, php-5.2.17. Для загрузки актуальной версии переходим на страницу www.php.net/downloads.
… используя ссылку, скачиваем исходник на сервер:
wget https://museum.php.net/php5/php-5.2.17.tar.gz
* если CentOS вернет ошибку, необходимо установить wget командой yum install wget.
Для удобства, сохраняем устанавливаемую версию PHP в переменную:
PHP_VER=’5.2.17′
Создаем каталог для расположения установленного PHP:
mkdir /opt/php-$PHP_VER
Распаковываем скачанный исходник:
tar zxvf php-*.tar.gz
После переходим в каталог с распакованными файлами:
cd php-*/
Сконфигурируем исходники:
./configure —prefix=/opt/php-$PHP_VER —with-config-file-path=/opt/php-$PHP_VER —with-pdo-pgsql —with-zlib-dir —with-freetype-dir —enable-mbstring —with-libxml-dir=/usr —enable-soap —enable-calendar —with-curl=/usr/bin —with-mcrypt —with-zlib —with-gd —with-pgsql —disable-rpath —enable-inline-optimization —with-bz2 —with-zlib —enable-sockets —enable-sysvsem —enable-sysvshm —enable-pcntl —enable-mbregex —with-mhash —enable-zip —with-pcre-regex —with-mysql —with-pdo-mysql —with-mysqli —with-jpeg-dir=/usr/lib64 —with-libdir=lib64 —with-png-dir=/usr —enable-gd-native-ttf —with-openssl —enable-ftp —with-imap —with-imap-ssl —with-kerberos —with-gettext —enable-cli —enable-fastcgi —enable-discard-path —enable-force-cgi-redirect —enable-cgi —enable-bcmath
Собираем пакет и устанавливаем его:
make
make install
Готово. Проверяем:
/opt/php-$PHP_VER/bin/php -v
… получим, примерно, такой ответ:
PHP 5.2.17 (cli) (built: Jul 2 2019 13:37:49)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
Ошибки и их устранение
Во время ручной сборки и установки пакетов, как правило, возникают проблемы. Проще всего решить те, которые связаны с зависимостями — для этого нужно просто установить недостающий компонент. Такие проблемы возникают на стадии конфигурирования (./configure).
Также проблемы могут возникнуть во время сборки исходника, например, при установке php 5.2.17 в моем случае появилась ошибка «доступ по указателю на неполный тип ret = buf->buffer->use;». Для решения проблемы необходимо было установить утилиту patch:
yum install patch
Скачать патч для php нужной версии:
wget https://www.dmosk.ru/files/php-5.2.17.patch
… и применить его:
patch -p0 < php-5.2.17.patch
После команда make отработала.
Таким образом, обработка ошибок носит индивидуальный характер. Как правило искать решение необходимо в Интернете.
Настройка apache
Для настройки веб-сервера необходимо подключить к нему нашу новую версию php и настроить виртуальные домены. В нашем примере мы настроим один виртуальный домен для php 5.4.16, второй — 5.2.17.
Подключение новой версии PHP к httpd
Устанавливаем mod_fcgid для httpd:
yum install mod_fcgid
Создаем каталог /usr/lib/cgi-bin:
mkdir /usr/lib/cgi-bin
… в него поместим скрипт, который будет запускаться при обработке php-скриптов:
vi /usr/lib/cgi-bin/php5-2-17-cgi
#!/bin/sh
PHPRC=»/opt/php-5.2.17/»
export PHPRC
PHP_FCGI_CHILDREN=4
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
exec /opt/php-5.2.17/bin/php-cgi
Разрешаем запуск его на исполнение:
chmod +x /usr/lib/cgi-bin/php5-2-17-cgi
Создаем конфигурационный файл для httpd:
vi /etc/httpd/php5-2-17.conf
<Directory /usr/lib/cgi-bin/>
LogLevel warn
Options -Indexes +FollowSymLinks +ExecCGI
Require all granted
</Directory>
<FilesMatch «\.php»>
SetHandler application/x-httpd-php5
</FilesMatch>
ScriptAlias /php5-2-17-cgi /usr/lib/cgi-bin/php5-2-17-cgi
Action application/x-httpd-php5 /php5-2-17-cgi
AddHandler application/x-httpd-php5 .php
Настройка виртуальных доменов
Создаем первый виртуальный домен:
vi /etc/httpd/conf.d/test-php5-4-16.conf
<VirtualHost *:80>
ServerName test-php5-4-16.local
DocumentRoot /var/www/test-php
<Directory /var/www/test-php>
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
</VirtualHost>
Создаем второй виртуальный домен:
vi /etc/httpd/conf.d/test-php5-2-17.conf
<VirtualHost *:80>
Include php5-2-17.conf
ServerName test-php5-2-17.local
DocumentRoot /var/www/test-php
<Directory /var/www/test-php>
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
</VirtualHost>
* обратите внимание, что для первого хоста мы используем php, который используется в нашей системе по умолчанию. Для второго домена мы подключаем конфигурационный файл php5-2-17.conf
Также мы будем использовать одну и туже директорию для DocumentRoot — для тестовых задач этого достаточно.
Проверяем конфигурацию Apache:
apachectl configtest
… если видим:
Syntax OK
Перезапускаем сервис:
systemctl restart httpd
Создание тестового сайта и проверка настроек
Создаем каталог для нашего тестового сайта:
mkdir /var/www/php-test
Создаем сайт, содержимое которого — один единственный скрипт:
vi /var/www/php-test/index.php
<?php
phpinfo();
?>
На рабочем компьютере открываем файл hosts:
- Для Linux: /etc/hosts
- Для Windows: \Windows\System32\drivers\etc\hosts
Укажем, что тестовые домены — это наш веб-сервер:
192.168.0.15 test-php5-4-16.local
192.168.0.15 test-php5-2-17.local
* где 192.168.0.15 — IP-адрес моего сервера; test-php5-4-16.local — домен для проверки версии php 5.4.16; test-php5-2-17.local — домен для проверки версии php 5.2.17.
Открываем браузер и заходим на два наших домена:
- http://test-php5-4-16.local/
- http://test-php5-2-17.local/
Мы должны увидеть сводку php с разными версиями:
Ускорение работы Apache изменениями во время выполнения
Чтобы повысить производительность сервера, нужно регулярно измерять производительность и осуществлять тонкую настройку конфигурации. Наиболее важные параметры, которые нужно оптимизировать:
Поиск DNS
Apache может тратить время на определение хоста каждого IP, с которого приходит запрос. Это замедляет обработку запроса, а также приводит к пустой трате ресурсов. Чтобы избежать этого, нужно отключить опцию HostnameLookups.
При настройке директив Allow from или Deny from используйте IP-адреса вместо доменных имён. Иначе будет осуществляться двойной поиск имени DNS, который уменьшит производительность сервера.
Настройка AllowOverride
Если задана опция AllowOverride, то Apache попытается открыть файл .htaccess в каждой папке, которую он посещает. Эти дополнительные запросы к файловой системе увеличивают время отправки ответа с сервера.
Поэтому лучше отключить эту опцию. Если переопределение настроек в файлах .htaccess необходимо в определённой папке, нужно разрешить это только для данного каталога.
Настройки FollowSymLinks и SymLinksIfOwnerMatch
Настройка Apache FollowSymLinks сообщает серверу, что нужно проверять символические ссылки и проходить по ним. Если она имеет значение Off, Apache придётся выполнять дополнительные проверки, что замедлит его работу.
Если установлена директива SymLinksIfOwnerMatch, сервер будет проходить по символическим ссылкам, только если владелец целевого файла тот же, что и владелец ссылки. Это также влияет на скорость работы Apache.
Лучше всего активировать директиву FollowSymLinks и выключить директиву ‘SymLinksIfOwnerMatch’. Но это может привести к проблемам с безопасностью, поэтому окончательное решение остается за вами.
Согласование содержимого (Content Negotiation)
Согласование содержимого позволяет клиентам выбирать формат данных, получаемых от сервера. Рекомендуется избегать согласования содержимого для быстрого ответа.
Если согласование содержимого необходимо для сайта, можно снизить задержки, используя файлы type-map вместо директивы Options MultiViews. Ее применение увеличивает задержку.
Настройка MaxClients
Настройка MaxClients устанавливает лимит количества одновременных запросов, которое может поддерживаться Apache. Если это значение слишком мало, запросы станут в очередь, и не будут обрабатываться.
Большое значение параметра может загрузить оперативную память и повлиять на скорость ответов Apache. Необходимо выбрать оптимально значение исходя из объёма доступной памяти и ресурсов, потребляемых процессом.
Настройки MinSpareServers, MaxSpareServers и StartServers
MaxSpareServers и MinSpareServers определяют количество дочерних процессов, которые будут находиться в состоянии ожидания обработки запросов. Эти параметры важны, потому что создание дочернего процесса отнимает ресурсы.
Если значение MinSpareServers слишком низкое, и на сервер поступает одновременно несколько запросов, Apache создаст дополнительные дочерние процессы. Это снижает возможность быстрого ответа на запрос клиента.
Значение MaxSpareServers не должно быть слишком большим. Так как стоящие в очереди на обработку дочерние процессы потребляют лишние серверные мощности. Нужно установить эти значения в оптимальном диапазоне, чтобы сбалансировать использование ресурсов и производительность.
Директива StartServers устанавливает количество дочерних серверных процессов, которые создаются при старте сервера. Если запросов много, а Apache часто перезагружается, нужно установить относительно большое значение.
Настройка MaxRequestsPerChild
Директива MaxRequestsPerChild устанавливает лимит количества запросов, которое будет обрабатывать каждый дочерний процесс. Слишком малое значения может привести к перегрузке сервера при создании новых процессов. Поэтому нужно установить это значение в диапазоне нескольких тысяч, чтобы ускорить работу Apache.
Настройка KeepAlive и KeepAliveTimeout
KeepAlive используется для поддержки единого соединения для передачи данных веб-страницы. Благодаря чему не тратится время на создание нового подключения для каждого файла.
KeepAliveTimeout определяет время ожидания следующего запроса. Если значение большое, дочерние процессы могут расходовать ресурсы, ожидая следующего запроса. Оптимальное значение – 2-5 секунд для небольших объемов трафика и 10 секунд для высоконагруженных серверов.
Timeout
Устанавливает время ожидания запроса от посетителя. При больших объемах трафика значение параметра должно быть не менее 120 секунд. Но лучше держать это значение минимальным. Это позволяет предотвратить излишнее расходование ресурсов.
5 шагов для ускорения работы Apache
Ускорить работу Apache можно на двух основных стадиях:
- Во время компиляции – настройки при установке сервера.
- Во время выполнения — установка параметров, влияющих на сервер во время его работы.
Настройки для ускорения Apache во время компиляции
Нужно выбирать вариант установки Apache, исходя из ваших требований. Это поможет создать быстрый и эффективный веб-сервер.
Загружайте только нужные модули
В Apache функциональность реализуется путем добавления модулей. Они бывают двух типов: статические и динамические (общие).
Чтобы посмотреть список модулей, поддерживаемых вашим сервером, используйте команду apachectl -M. Статические модули компилируются в бинарные файлы httpd, а динамические загружаются непосредственно во время выполнения.
Статические и динамические модулиключевые различия
Статические модули | Динамические модули |
Компилируются в бинарные файлы | Добавляются во время выполнения |
Требуют перекомпиляции кода | Перекомпиляция не требуется |
Быстро загружаются | Замедляют веб-сервер |
Чем больше статических модулей в бинарных файлах, тем быстрее работает веб-сервер. Но они требуют перекомпиляции Apache каждый раз, когда нужно что-то изменить. Из-за этого динамические модули или DSO используются чаще, поскольку они могут быть скомпилированы отдельно и загружены во время выполнения.
Но большое количество динамических или общих модулей может замедлить работу сервера Apache и сайта
Поэтому при выборе модулей требуется соблюдать осторожность
Чтобы увеличить скорость работы и производительность, используйте минимальное количество динамических модулей, поскольку они уменьшают объем доступной памяти.
Выберите правильный MPM
В Apache используются MPM (мульти-процессинговые модули), которые обрабатывают запросы, приходящие на сервер. Они прослушивают сетевые порты сервера, принимая запросы и создавая дочерние процессы.
MPM бывают двух типов: Prefork и Worker. В MPM Prefork каждый процесс httpd обрабатывает один сетевой запрос. Это более безопасно по сравнению с MPM Worker, но требует большего количества памяти и ресурсов.
MPM – Prefork и Worker
MPM Prefork | MPM Worker |
Один поток | Несколько потоков |
Использует больше ресурсов | Использует меньше памяти |
Отказоустойчив | Справляется с большим трафиком |
При использовании MPM Worker Apache работает в режиме многопоточного сервера, где каждый отвечает за свой запрос. Этот вариант подходит для обработки большего трафика при ограниченных мощностях сервера.
По умолчанию большинство установок Apache используют модуль Prefork. Он применяется для обработки больших объемов трафика. Вы можете проверить, какой модуль MPM использует ваш сервер при помощи следующей команды:
Определение типа MPM на вашем веб—сервере Apache
В Apache 2.4 появилась поддержка э MPM модуля Event, который может обрабатывать множественные запросы внутри одного потока. Поэтому он работает даже быстрее, чем модуль Worker.
Установка компонентов по отдельности
Сервер HTTP Apache
-
Загрузите сервер HTTP Apache2.
-
Запустите установочный файл . Запускается мастер установки. Следуйте указаниям.
В Microsoft Vista не следует устанавливать Apache Server в местоположение по умолчанию, находящееся в папке «Program Files». Все файлы в папке «Program Files» защищены от записи.
-
По завершении установки перезапустите сервер Apache.
-
Для проверки успешности установки запустите браузер и введите следующий URL-адрес:
Откроется страница приветствия Apache:
Устранение проблем
По умолчанию сервер Apache прослушивает порт 80. Однако этот порт, возможно, уже используется другими службами, например Skype. Для разрешения проблемы измените порт, прослушиваемый сервером:
-
Откройте файл настройки веб-сервера Apache . По умолчанию файл расположен в .
-
Перейдите к строке и замените номер порта: например, на . Сохраните файл.
-
Перезапустите веб-сервер Apache.
-
Для проверки работоспособности веб-сервера запустите браузер, введите URL-адрес и явно укажите номер порта:
Кроме того, можно также приостановить процессы, прослушивающие порт 80. В окне «Диспетчер задач» выберите соответствующее имя файла и нажмите кнопку «Завершить процесс».
Дополнительные сведения об установке и настройке сервера приведены здесь.
Механизм PHP
-
Загрузите бинарный пакет установщика Windows для выбранной версии PHP5.
*Важно.*Если установщик для нужной версии PHP отсутствует, установите ее вручную из файла .zip. См
раздел Этапы ручной установки в документации php.net.
-
По завершении загрузки запустите установочный файл . Запускается мастер установки.
-
На экране «Каталог конфигурации Apache» укажите каталог, в котором расположен файл (по умолчанию используется каталог ). Обработка кода PHP включается автоматически.
-
При необходимости использования сервера базы данных MySQL выберите вариант «Полная установка» или выберите элементы MySQL и MySQLi в списке «Расширения».
-
После завершения установки перезапустите сервер Apache.
-
Для проверки успешности установки механизма PHP и включения обработки кода PHP в настройке Apache выполните следующие действия:
-
Сохраните файл в папке htdocs с именем . По умолчанию путь к файлу имеет вид
-
Запустите браузер и введите следующий URL-адрес: . Откроется следующая страница:
Устранение проблем
Если страница не открывается, выполните следующие действия:
-
Перезапустите сервер Apache.
-
Убедитесь, что файл настройки сервера Apache httpd.conf содержит следующие строки:
-
Если эти строки отсутствуют, добавьте их, сохраните и перезапустите сервер Apache.
-
Обновите страницу http://localhost:<port>/test.php.
Настройка среды
-
Если при установке используются настройки по умолчанию, обработка PHP включается автоматически.
-
Для присоединения
XDebug к механизму PHP перейдите к файлу и добавьте в него следующие строки:
Для механизма PHP 5.2 с ориентацией на многопотоковое исполнение:
Для механизма PHP 5.2 без ориентации на многопотоковое исполнение:
Для любого механизма PHP 5.3:
Некоторые пользователи считают, что необходимо включить в код следующие строки, однако другие пользователи пропускают их:
Дополнительные сведения о настройке отладчика XDebug приведена здесь.
Убедитесь в том, что указанные пути соответствуют именам и расположению соответствующих файлов, как это определено при установке. |
-
Для проверки того, что предварительно установленный механизм PHP поддерживает использование сервера базы данных MySQL выполните следующие действия:
-
Выберите команду «Пуск» > «Панель управления».
-
На экране «Панель управления» выберите параметр «Добавление или удаление программ».
-
На экране «Добавление или удаление программ» перейдите к области «PHP <номер_версии>» и нажмите кнопку «Изменить». Последует запуск мастера настройки PHP. Нажмите кнопку «Далее».
-
На экране «Изменение, исправление или удаление» выберите команду «Изменить» и нажмите кнопку «Далее».
-
На экране «Установка веб-сервера» выберите версию сервера Apache – в рассматриваемом примере используется Apache 2.2.x Module. Нажмите кнопку «Далее».
-
На экране «Каталог конфигурации Apache» укажите каталог, в котором расположен файл настройки Apache . Нажмите кнопку «Далее».
-
На экране «Выбор компонентов для установки» разверните узел «Расширения» и выберите элементы MySQL и MySQLi. Нажмите кнопку «Далее».
-
На экране «Все готово к изменению PHP <номер_версии>» выберите команду «Изменить».
-
На экране «Мастер установки PHP <номер_версии> завершен» нажмите кнопку «Готово».
-
Для отправки комментариев и предложений, получения поддержки и новостей о последних разработках, связанных с PHP IDE NetBeans присоединяйтесь к списку рассылки [email protected].
Решение проблем
Когда вы помещаете директивы в файл .htaccess и не получаете желаемого эффекта, может быть несколько причин из-за которых что-то пошло не так.
Чаще всего проблема в том, что AllowOverride не установлена так, чтобы учитывались ваши конфигурационные директивы. Убедитесь, что у вас не включено
AllowOverride None
Следующий тест позволит однозначно ответить на вопрос, включена ли поддержка файлов .htaccess или нет: поместите какой-нибудь мусор в файл .htaccess и перезагрузите страницу. Если не появиться ошибка сервера, то практически наверняка включено AllowOverride None.
С другой стороны, если вы получаете ошибки сервера при попытке доступа к документам, проверьте лог error (ошибок) httpd. Весьма вероятно, что он скажет вам, что эта используемая в файле .htaccess директива не разрешена:
/var/www/html/.htaccess: DirectoryIndex not allowed here
Это говорит о том, что либо вы используете директиву, которая не разрешена в файлах .htaccess, или что у вас просто нет установленной AllowOverride на уровень, достаточном для используемой директивы.
Ещё один вариант, в журнале может быть сказано, что у вас ошибка синтаксиса в самой используемой директиве:
/var/www/html/.htaccess: RewriteCond: bad flag delimiters
В этом случае сообщение об ошибке должно быть конкретным о том, что у вас не так с файлом .htaccess и используемыми директивами.
Запуск нескольких версий PHP
For example, selecting different versions of PHP can allow a system to run PHP 7.0 for the cli SAPI but PHP 5.6 for the system’s web server. It also allows system administrators or application developers to quickly test an application on different versions of PHP.
Чтобы вывести доступные версии для cli SAPI, используйте команду:
php5.5 php5.6 * php7.0
Версия, отмеченная символом , является текущей активной версией. Чтобы посмотреть другие SAPI, замените на , или .
Чтобы переключить версию:
Номер в этом примере соответствует номеру из вывода суб-команды , приведенной выше. PHP версии 7.0 теперь используется для командной строки:
PHP 7.0.10-pl0-gentoo (cli) (built: Aug 23 2016 12:38:44) ( NTS )
Конечный результат
Таким образом конечный полный, максимально правильный и безопасный код подключения к Apache2 модуля PHP, установка mime типов и задание обработчика будет выглядеть так:
LoadModule php5_module "z:\server\php\php5apache2_4.dll" PHPIniDir "z:\server\php" <IfModule !mime_module> Error "Module is not loaded: mod_mime" </IfModule> <FilesMatch "\.ph(p?|tml)$"> AddType application/x-httpd-php .php .php2 .php3 .php4 .php5 .php6 .phtml </FilesMatch> <FilesMatch "\.phps$"> AddType application/x-httpd-php-source .phps </FilesMatch> <FilesMatch "\.ph(p?|tml)$"> AddHandler application/x-httpd-php .php .php2 .php3 .php4 .php5 .php6 .phtml </FilesMatch> <FilesMatch "\.phps$"> AddHandler application/x-httpd-php-source .phps </FilesMatch>
В это же время минимальный код подключения модуля PHP выглядит так:
LoadModule php5_module "z:\server\php\php5apache2_4.dll" AddType application/x-httpd-php .php .php2 .php3 .php4 .php5 .php6 .phtml
или так:
LoadModule php5_module "z:\server\php\php5apache2_4.dll" AddHandler application/x-httpd-php .php .php2 .php3 .php4 .php5 .php6 .phtml
ну или так:
LoadModule php5_module "z:\server\php\php5apache2_4.dll" PHPIniDir "z:\server\php" AddHandler application/x-httpd-php .php .php2 .php3 .php4 .php5 .php6 .phtml AddHandler application/x-httpd-php-source .phps AddType application/x-httpd-php .php .php2 .php3 .php4 .php5 .php6 .phtml AddType application/x-httpd-php-source .phps
Объединение файла .htaccess с главными конфигурационными файлами
Файлы .htaccess могут перезаписать раздел <Directory> для соответствующей директории, но будут перезаписаны другими типами конфигурационных разделов из главных конфигурационных файлов. Это можно использовать для закрепления конкретных конфигурацией, даже при наличии либеральных настроек AllowOverride. Например, для предотвращения выполнения скрипта, но позволив все другие настройки в .htaccess, вы можете использовать:
<Directory "/www/htdocs"> AllowOverride All </Directory> <Location "/"> Options +IncludesNoExec -ExecCGI </Location>
Этот пример подразумевает, что вашим DocumentRoot является /www/htdocs.
Как включить .htaccess
Включение поддержки файла .htaccess сказывается на производительность сервера даже в том случае, если фактически этот файл не используется (объяснение ниже). Поэтому по умолчанию файл .htaccess отключён в Apache.
Включить .htaccess можно индивидуально для каждой директивы Directory. Для этого внутри неё нужно указать нужную настройку с помощью директивы AllowOverride. По умолчанию в главном конфигурационном файле следующее:
<Directory "${SRVROOT}/htdocs"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
Как видно, AllowOverride установлен на None. Вместо None можно указать All или любые комбинации ключевых слов, например:
AllowOverride FileInfo AuthConfig Limit
Для включения всех возможностей .htaccess установите так:
<Directory "${SRVROOT}/htdocs"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
Чтобы настройки вступили в силу, перезапустите веб-сервер.
Файл .htaccess находится не в папках Apache, а в папках сайтов, то есть к нему может быть сделан запрос и, при неправильной настройке, посторонние его могут скачать. Файл .htaccess содержать информацию интересную для атакующего (хакеров), поэтому нужно запретить посторонним доступ к этому файлу. Запрет доступа к файлам .htaccess и .htpasswd для посетителей сайтов делается следующим образом:
<Files ".ht*"> Require all denied </Files>
По умолчанию эта настройка уже имеется в главном конфигурационном файле Apache.
Как применяются директивы файла .htaccess
Конфигурационные директивы, найденные в файле .htaccess, применяются к директории, в которой найден файл .htaccess, и всем её поддиректориям
Тем не менее, важно также помнить, что могут быть файлы .htaccess в родительских директориях. Директивы применяются в том порядке, как они были найдены
Поэтому файл .htaccess конкретной директории может перезаписывать директивы, найденные в файлах .htaccess выше в дереве директорий. А те, в свою очередь, могли уже перезаписать директивы, найденные ещё выше или директивы самого главного конфигурационного файла сервера.
Пример:
В директории /www/htdocs/example1 у нас есть файл .htaccess содержащий следующее:
Options +ExecCGI
Примечание: у вас должна быть включена опция «AllowOverride Options» чтобы разрешить использовать директиву «Options» в .htaccess файлах. Либо значение AllowOverride должно быть установлено на All.
В директории /www/htdocs/example1/example2 у нас есть файл .htaccess содержащий:
Options Includes
Поскольку второй файл .htaccess в директории /www/htdocs/example1/example2, то выполнение CGI не разрешено, поскольку эффект будет иметь опция Options Includes, которая полностью перезаписывает значения настроек Options, имеющих место ранее.
Решение
Похоже, что с вашей конфигурацией что-то не так, вот несколько вещей, которые вы можете проверить:
-
Убедитесь, что PHP установлен и работает правильно. Это может звучать глупо, но вы никогда не знаете. Простой способ проверить это запустить из командной строки и посмотреть, если возвращает информацию о версии или каких-либо ошибок.
-
Убедитесь, что модуль PHP указан и без комментариев внутри вашего Apache httpd.conf Это должно быть что-то вроде в файле. Ищи и убедитесь, что нет комментариев () перед ней.
-
Убедитесь, что файл Apache httpd.conf имеет тип PHP MIME. Это должно быть что-то вроде , Это говорит Apache для запуска файлы как PHP. Ищите AddType, а затем убедитесь, что есть запись для PHP, и что это не комментируется.
-
Убедитесь, что ваш файл имеет расширение или любое другое расширение, указанное в определении MIME в пункте # 3, иначе оно не будет выполняться как PHP.
-
Убедитесь, что вы не используете короткие метки в файле PHP (), это не включен на всех серверах по умолчанию и их использование не рекомендуется. использование вместо (или с если у вас есть код, который опирается на них).
-
Убедитесь, что вы обращаетесь к своему файлу через веб-сервер, используя URL-адрес, например не через локальный доступ к файлам
И, наконец, проверьте Руководство по PHP для дальнейших советов по настройке.
358