Раздел содержит общие вопросы о способах установки PHP. Дистрибутивы PHP совместимы с большей частью операционных систем и веб-серверов.
Инструкции раздела «Установка и настройка» рассказывают, как установить PHP.
PHP — связующее звено. Это связующее звено помогает создавать крутые веб-приложения путём объединения десятков сторонних библиотек в единое целое за счёт интуитивно понятного и простого в освоении языкового интерфейса. Гибкость и сила PHP основана на стабильности и устойчивости, лежащей в основе платформы. Чтобы всё работало, нужна рабочая операционная система, рабочий веб-сервер и рабочие сторонние библиотеки. Когда один элемент перестаёт работать, PHP нуждается в способах выявления и безотлагательного исправления проблем. И когда разработчик усложняет базовый фреймворк тем, что не изолирует исполняемые потоки и сегменты памяти, и не даёт потокам отдельных изолированных «песочницы», — ослабляется вся PHP-система.
Посмотрите на конфигурацию протокола FastCGI, в которой PHP выполняется в своём пространстве памяти, если требуется подключить многопоточный модуль MPM.
По умолчанию в Unix файл лежит в каталоге /usr/local/lib, который соответствует пути <установочный-путь>/lib. Этот путь разрешается изменять в момент компиляции через флаг --with-config-file-path Например, так:
--with-config-file-path=/etc
--with-config-file-scan-dir=PATH
В ОС Windows путь к файлу php.ini по умолчанию — путь к директории Windows. При работе с веб-сервером Apache файл php.ini лежит по пути: ?\program files\apache group\apache\. Поэтому для разных версий Apache на одном компьютере разрешается создавать разные файлы php.ini.
Смотрите также: файл настроек.
Это значит, что, возможно, PHP столкнулся с проблемой и падает в core-dump. Просмотрите логи ошибок сервера, чтобы проверить это, а затем попытайтесь воспроизвести цепочку шагов, которые привели к ошибке; например, создав отдельную тестовую программу. И если вы умеете пользоваться отладчиком gdb, то это поможет получить стек вызовов функций (backtrace) для включения его в отчёт об ошибке, чтобы упростить выявление причин проблемы разработчикам. Следующие рекомендации бывают полезны, если PHP работает как модуль для веб-сервера Apache:
Остановите httpd-процессы
gdb httpd
Вновь остановите httpd-процессы
> run -X -f путь_к_httpd.conf
Затем скопируйте URL-адрес, который вызвал проблему в браузере
> run -X -f путь_к_httpd.conf
О событиях core dump сообщит отладчик gdb
Введите bt
Включите backtrace в отчёт об ошибке и отправьте трассировку по адресу: » https://github.com/php/php-src/issues
Проверьте, с одинаковыми ли пакетами обработки RegEx скомпилировали PHP и Apache, если скрипт использует регулярные выражения наподобие тех, с которыми работает функция preg_match() и подобные. При работе PHP с веб-сервером Apache 1.3.x это выполняется автоматически.
Раскомментируйте или добавьте каждую или часть следующих строк в файл httpd.conf, если и Apache, и PHP установили из RPM-пакетов:
# Extra Modules AddModule mod_php.c AddModule mod_perl.c # Extra Modules LoadModule php_module modules/mod_php.so LoadModule php5_module modules/libphp5.so LoadModule perl_module modules/libperl.so
AddType application/x-httpd-php .php
Нет, PHP отлично работает с модулями FrontPage. Проблема в том, что патч FrontPage изменяет ряд структур Apache, на которые полагается PHP. Перекомпиляция PHP командой «make clean ; make» после установки патча FP решит проблему.
Выберите в браузере опцию «Посмотреть исходный код» и, возможно, увидите свой PHP-код. Это значит, что веб-сервер не передал скрипт интерпретатору PHP. Что-то не так с конфигурацией сервера. Внимательно проверьте конфигурацию сервера на соответствие инструкциям по установке PHP.
Что-то пошло не так, когда сервер попытался запустить PHP. Чтобы увидеть исходную ошибку, которая возникла, в командной строке перейдите в директорию, в которой лежит исполняемый файл PHP (php.exe в Windows), и запустите команду php -i. Если есть какие-либо проблемы с запуском PHP, будет выведена соответствующая ошибка, которая подскажет, что надо исправить. Если вы увидите экран с HTML-кодом (вывод функции phpinfo()), значит, PHP работает нормально, и проблема связана с настройками веб-сервера.
[mybox:user /src/php5] root# apachectl configtest apachectl: /usr/local/apache/bin/httpd Undefined symbols: _compress _uncompress
Это означает, что проблема не в PHP, а в клиентских библиотеках MySQL. Часть библиотек требуют сборки PHP с опцией --with-zlib. Этот нюанс описан в FAQ по MySQL.
cgi error: The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:
Это сообщение говорит о том, что PHP не справился с выводом данных в стандартный поток ввода-вывода. Чтобы увидеть понятное сообщение об ошибке, в командной строке перейдите в директорию, в которой лежит исполняемый файл PHP (php.exe в Windows), и запустите команду php -i. PHP выведет ошибку, которая связана с запуском PHP и которая подскажет, что требуется исправить. Экран с HTML-кодом, который вывела функция phpinfo()), сообщит, что PHP работает нормально.
Как только PHP заработает в командной строке, попробуйте снова получить доступ к скрипту через браузер. Вероятные причины, по которым скрипт не сработает, состоят в следующем:
ISUR_<machinename>
получить к ним доступ.
Убедитесь, что пользователи, которым может потребоваться запуск PHP-скрипта, имеют права на запуск php.exe! Веб-сервер IIS использует анонимного пользователя, который был создан при инсталляции. Этот пользователь должен иметь права на запуск файла php.exe. Так же, каждый авторизованный пользователь должен иметь права на запуск php.exe. А для IIS4 нужно сказать, что PHP — это скриптовый движок. Также прочтите этот FAQ.
Security Alert! PHP CGI
cannot be accessed directly.
.
Вы должны установить опцию
cgi.force_redirect со значением 0
.
По умолчанию она равна 1
. Убедитесь, что она не закомментирована
символом ;
. Как и остальные опции PHP, её настраивают в файле php.ini
Поскольку опция по умолчанию равна 1
, критически важно убедиться,
что используется именно тот файл php.ini, который нужен.
Этот FAQ рассказывает об этом подробнее.
Для проверки, какой именно файл php.ini подключается, запустите функцию
phpinfo(). В верхней части вывода будет список с названием
Configuration File (php.ini)
. Из него можно понять, какой
именно файл php.ini подключён. Если указана только директория в PATH,
а файл конфигурации не прочитан, то просто скопируйте его в эту директорию.
Если php.ini включён в переменную окружения PATH — это значит, что он прочитан.
Если файл php.ini читается и PHP запускается как модуль, то после внесения изменений в php.ini необходимо перезагрузить веб-сервер.
Также смотрите описание php_ini_loaded_file().
В Windows:
Старт → Панель Управления → Система
Перейдите на вкладку «Дополнительно»
Нажмите кнопку «Переменные Окружения»
Посмотрите раздел «Системные Переменные»
Найдите строку, которая содержит переменную PATH
Дважды щёлкните по ней мышью
Допишите в конец строки путь к исполняемому файлу PHP, не забыв добавить перед ним символ ';'
(например ;C:\php
)
Нажмите OK
Замечание: Не забудьте перезагрузиться после описанных действий, а после перезагрузки проверить, что переменная окружения PATH содержит нужный путь.
Есть несколько способов сделать это. Если вы установили Apache, обратитесь к документации Apache, иначе вы должны установить переменную среды PHPRC.
Windows: Как при работе PHP с веб-сервером IIS проверить, что для PHP открыт доступ на запись в каталог временных файлов?
В Проводнике щёлкните правой кнопкой мыши на каталоге временных файлов — директория, путь к которой хранит переменная %TEMP%, — чтобы через свойства открыть сведения о разрешениях. Путь к каталогу временных файлов доступен из конфигурации или вывода функции phpinfo().
Веб-сервер IIS будет работать правильно, если пользователю IIS_User
предоставили разрешение Изменение
.
Всё будет работать правильно, если ссылки на PHP-файлы содержат расширения.
Этот FAQ описывает конфигурацию, в которой ссылки не содержат расширения
и требуется согласовывать контент для PHP-файлов из URL-адреса.
Строку AddType application/x-httpd-php .php
заменяют на следующие, если это так:
AddHandler php5-script php AddType text/html php
php-script
.
Нет, можно обработать и другие методы запроса, например CONNECT. Правильный статус ответа нужно посылать через функцию header(). Если нужно, чтобы PHP работал только с методами GET и POST, необходимо сконфигурировать Apache так:
<LimitExcept GET POST> Deny from all </LimitExcept>