УстановкаУстановка
Раздел содержит общие вопросы о способах установки PHP.
Дистрибутивы PHP совместимы с большей частью операционных систем и веб-серверов.
Инструкции раздела «» рассказывают, как установить PHP.
Почему лучше не пользоваться веб-сервером Apache2 с многопоточным модулем MPM (event, worker)
в производственной среде?
PHP — связующее звено. Это связующее звено помогает создавать крутые веб-приложения
путём объединения десятков сторонних библиотек в единое целое
за счёт интуитивно понятного и простого в освоении языкового интерфейса.
Гибкость и сила PHP основана на стабильности и устойчивости, лежащей в основе платформы.
Чтобы всё работало, нужна рабочая операционная система, рабочий
веб-сервер и рабочие сторонние библиотеки. Когда один элемент перестаёт
работать, PHP нуждается в способах выявления и безотлагательного исправления проблем.
И когда разработчик усложняет базовый фреймворк тем, что не изолирует
исполняемые потоки и сегменты памяти, и не даёт потокам отдельных
изолированных «песочницы», — ослабляется вся PHP-система.
Посмотрите на конфигурацию протокола FastCGI,
в которой PHP выполняется в своём пространстве памяти,
если требуется подключить многопоточный модуль MPM.
ОС Unix и Windows: Где искать файл &php.ini;?
По умолчанию в Unix файл лежит в каталоге /usr/local/lib,
который соответствует пути <установочный-путь>/lib.
Этот путь разрешается изменять в момент компиляции через флаг
--with-config-file-path
Например, так:
--with-config-file-path=/etc
А затем скопировать файл php.ini-development из дистрибутива
по пути /etc/php.ini и внести в него необходимые изменения.
--with-config-file-scan-dir=PATH
В ОС Windows путь к файлу &php.ini; по умолчанию — путь
к директории Windows. При работе с веб-сервером Apache файл &php.ini;
лежит по пути: ?\program files\apache group\apache\.
Поэтому для разных версий Apache на одном компьютере разрешается создавать разные файлы &php.ini;.
Смотрите также: файл настроек.
Unix: Я установил PHP, но при каждом открытии какого-либо документа
вижу «Document Contains No Data», что это значит?
Это значит, что, возможно, 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 в отчёт об ошибке и отправьте трассировку по адресу:
&url.php.bugs;
Проверьте, с одинаковыми ли пакетами обработки RegEx скомпилировали PHP и Apache,
если скрипт использует регулярные выражения наподобие тех, с которыми работает
функция preg_match и подобные.
При работе PHP с веб-сервером Apache 1.3.x это выполняется автоматически.
Unix: Я установил PHP через менеджер пакетов RPMS, но Apache не обрабатывает
PHP-страницы, в чём дело?
Раскомментируйте или добавьте каждую или часть следующих строк в файл &httpd.conf;,
если и Apache, и PHP установили из RPM-пакетов:
И добавьте:
…в глобальные свойства или в свойства того виртуального домена VirtualDomain,
для которого требуется включить поддержку PHP.
Unix: Я исправил Apache модулем FrontPage и теперь PHP не работает.
Получается, PHP несовместим с модулями Apache FrontPage?
Нет, PHP отлично работает с модулями FrontPage. Проблема в том, что
патч FrontPage изменяет ряд структур Apache, на которые полагается PHP.
Перекомпиляция PHP командой «make clean ; make» после установки патча FP решит
проблему.
Unix и Windows: Я установил PHP, но при попытке открыть PHP-файл
в браузере вижу пустой экран.
Выберите в браузере опцию «Посмотреть исходный код» и, возможно, увидите свой PHP-код.
Это значит, что веб-сервер не передал скрипт интерпретатору PHP. Что-то
не так с конфигурацией сервера. Внимательно проверьте конфигурацию
сервера на соответствие инструкциям по установке PHP.
Unix и Windows: Я установил PHP, но когда пытаюсь посмотреть созданную PHP-страницу
в браузере, получаю ошибку 500.
Что-то пошло не так, когда сервер попытался запустить PHP. Чтобы увидеть
исходную ошибку, которая возникла, в командной строке перейдите в директорию,
в которой лежит исполняемый файл PHP (php.exe в Windows),
и запустите команду php -i. Если есть какие-либо проблемы с
запуском PHP, будет выведена соответствующая ошибка, которая подскажет, что
надо исправить. Если вы увидите экран с HTML-кодом (вывод функции
phpinfo), значит, PHP работает нормально, и проблема
связана с настройками веб-сервера.
Отдельные операционные системы: Я установил PHP без ошибок,
но когда пытаюсь запустить Apache, выводится ошибка:
[mybox:user /src/php5] root# apachectl configtest
apachectl: /usr/local/apache/bin/httpd Undefined symbols:
_compress
_uncompress
Это означает, что проблема не в PHP, а в клиентских библиотеках MySQL.
Часть библиотек требуют сборки PHP с опцией .
Этот нюанс описан в FAQ по MySQL.
Windows: Я установил PHP, но когда пытаюсь открыть страницу скрипта
в браузере, получаю ошибку:
Это сообщение говорит о том, что PHP не справился с выводом данных в стандартный поток ввода-вывода.
Чтобы увидеть понятное сообщение об ошибке, в командной строке перейдите в директорию,
в которой лежит исполняемый файл PHP (php.exe в Windows),
и запустите команду php -i. PHP выведет ошибку, которая связана с запуском PHP
и которая подскажет, что требуется исправить. Экран с HTML-кодом, который вывела
функция phpinfo), сообщит, что PHP работает нормально.
Как только PHP заработает в командной строке, попробуйте снова получить доступ
к скрипту через браузер. Вероятные причины, по которым скрипт не сработает, состоят в следующем:
Права на PHP-скрипт, файлы php.exe,
php5ts.dll, &php.ini; или модули PHP,
которые вы пытаетесь загрузить, не дают анонимному интернет-пользователю
ISUR_<machinename> получить к ним доступ.
Файл скрипта отсутствует (или, возможно, лежит не там, где вы предполагали,
относительно корневого каталога веб-сервера). Обратите внимание, что на веб-сервере IIS
можно отловить ошибку, отметив опцию «check file exists» в настройках
«script mappings» в Internet Services Manager. Если файл отсутствует, сервер вместо
этого вернёт ошибку 404. Дополнительное преимущество состоит в том, что IIS будет выполнять
необходимую аутентификацию на основе разрешений NTlanMan в файле сценария.
Windows: Я всё сделал по инструкции, но PHP и сервер IIS не хотят работать вместе!
Убедитесь, что пользователи, которым может потребоваться запуск PHP-скрипта,
имеют права на запуск php.exe! Веб-сервер IIS использует анонимного
пользователя, который был создан при инсталляции. Этот пользователь должен иметь
права на запуск файла php.exe. Так же, каждый авторизованный
пользователь должен иметь права на запуск php.exe.
А для IIS4 нужно сказать, что PHP — это скриптовый движок.
Также прочтите этот FAQ.
Когда я запускаю PHP как интерфейс CGI к веб-серверам IIS, PWS, OmniHTTPD или Xitami,
получаю ошибку: Security Alert! PHP CGI
cannot be accessed directly..
Вы должны установить опцию
cgi.force_redirect со значением 0.
По умолчанию она равна 1. Убедитесь, что она не закомментирована
символом ;. Как и остальные опции PHP, её настраивают в файле &php.ini;
Поскольку опция по умолчанию равна 1, критически важно убедиться,
что используется именно тот файл &php.ini;, который нужен.
Этот FAQ рассказывает об этом подробнее.
Как я могу понять, что файл &php.ini; найден и используется? Складывается впечатление,
что вносимые изменения игнорируются.
Для проверки, какой именно файл &php.ini; подключается, запустите функцию
phpinfo. В верхней части вывода будет список с названием
Configuration File (php.ini). Из него можно понять, какой
именно файл &php.ini; подключён. Если указана только директория в PATH,
а файл конфигурации не прочитан, то просто скопируйте его в эту директорию.
Если &php.ini; включён в переменную окружения PATH — это значит, что он прочитан.
Если файл &php.ini; читается и PHP запускается как модуль, то после
внесения изменений в &php.ini; необходимо перезагрузить
веб-сервер.
Также смотрите описание php_ini_loaded_file.
Как добавить директорию PHP в переменную PATH в Windows?
В Windows:
Старт → Панель Управления → Система
Перейдите на вкладку «Дополнительно»
Нажмите кнопку «Переменные Окружения»
Посмотрите раздел «Системные Переменные»
Найдите строку, которая содержит переменную PATH
Дважды щёлкните по ней мышью
Допишите в конец строки путь к исполняемому файлу PHP, не забыв добавить перед ним символ ';'
(например ;C:\php)
Нажмите OK
Не забудьте перезагрузиться после описанных действий, а после перезагрузки
проверить, что переменная окружения PATH содержит нужный путь.
Как в Windows я могу сделать файл &php.ini; доступным для PHP?
Есть несколько способов сделать это. Если вы установили Apache,
обратитесь к документации Apache, иначе вы должны установить
переменную среды PHPRC.
Windows: Как при работе PHP с веб-сервером IIS проверить,
что для PHP открыт доступ на запись в каталог временных файлов?
В Проводнике щёлкните правой кнопкой мыши на каталоге временных файлов — директория,
путь к которой хранит переменная %TEMP%, — чтобы через свойства открыть сведения о разрешениях.
Путь к каталогу временных файлов доступен из конфигурации или вывода
функции phpinfo.
Веб-сервер IIS будет работать правильно, если пользователю IIS_User
предоставили разрешение Изменение.
Можно ли использовать согласование контента Apache, которое настраивается опцией MultiViews,
с PHP?
Всё будет работать правильно, если ссылки на PHP-файлы содержат расширения.
Этот FAQ описывает конфигурацию, в которой ссылки не содержат расширения
и требуется согласовывать контент для PHP-файлов из URL-адреса.
Строку AddType application/x-httpd-php .php
заменяют на следующие, если это так:
Это решение не сработает с Apache 1, поскольку модуль PHP не отлавливает
php-script.
Ограничили ли PHP обработкой только HTTP-методов GET и POST?
Нет, можно обработать и другие методы запроса, например CONNECT.
Правильный статус ответа нужно посылать через функцию
header. Если нужно, чтобы PHP работал только с
методами GET и POST, необходимо сконфигурировать Apache так:
Deny from all
]]>