Раздел содержит общие вопросы о способах установки 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>