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