Files
php-doc-ru/faq/installation.xml

542 lines
26 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 2dbf3d9064d4cb07f0a2f7d06641c877a2e5ed24 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="faq.installation" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Установка</title>
<titleabbrev>Установка</titleabbrev>
<para>
Раздел содержит общие вопросы о способах установки PHP.
Дистрибутивы PHP совместимы с большей частью операционных систем и веб-серверов.
</para>
<para>
Инструкции раздела «<xref linkend="install"/>» рассказывают, как установить PHP.
</para>
<qandaset>
<qandaentry xml:id="faq.installation.apache2">
<question>
<para>
Почему лучше не пользоваться веб-сервером Apache2 с многопоточным модулем MPM (event, worker)
в производственной среде?
</para>
</question>
<answer>
<para>
PHP — связующее звено. Это связующее звено помогает создавать крутые веб-приложения
путём объединения десятков сторонних библиотек в единое целое
за счёт интуитивно понятного и простого в освоении языкового интерфейса.
Гибкость и сила PHP основана на стабильности и устойчивости, лежащей в основе платформы.
Чтобы всё работало, нужна рабочая операционная система, рабочий
веб-сервер и рабочие сторонние библиотеки. Когда один элемент перестаёт
работать, PHP нуждается в способах выявления и безотлагательного исправления проблем.
И когда разработчик усложняет базовый фреймворк тем, что не изолирует
исполняемые потоки и сегменты памяти, и не даёт потокам отдельных
изолированных «песочницы», — ослабляется вся PHP-система.
</para>
<para>
Посмотрите на конфигурацию протокола FastCGI,
в которой PHP выполняется в своём пространстве памяти,
если требуется подключить многопоточный модуль MPM.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.phpini">
<question>
<para>
ОС Unix и Windows: Где искать файл &php.ini;?
</para>
</question>
<answer>
<para>
По умолчанию в Unix файл лежит в каталоге <filename>/usr/local/lib</filename>,
который соответствует пути <filename>&lt;установочный-путь&gt;/lib</filename>.
Этот путь разрешается изменять в момент компиляции через флаг
<link linkend="configure.with-config-file-path">--with-config-file-path</link>
Например, так:
<programlisting role="shell">
--with-config-file-path=/etc
</programlisting>
А затем скопировать файл <filename>php.ini-development</filename> из дистрибутива
по пути <filename>/etc/php.ini</filename> и внести в него необходимые изменения.
</para>
<programlisting role="shell">
--with-config-file-scan-dir=PATH
</programlisting>
<para>
В ОС Windows путь к файлу &php.ini; по умолчанию — путь
к директории Windows. При работе с веб-сервером Apache файл &php.ini;
лежит по пути: <filename>?\program files\apache group\apache\</filename>.
Поэтому для разных версий Apache на одном компьютере разрешается создавать разные файлы &php.ini;.
</para>
<para>
Смотрите также: <link linkend="configuration.file">файл настроек</link>.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.nodata">
<question>
<para>
Unix: Я установил PHP, но при каждом открытии какого-либо документа
вижу «Document Contains No Data», что это значит?
</para>
</question>
<answer>
<para>
Это значит, что, возможно, PHP столкнулся с проблемой и падает в core-dump.
Просмотрите логи ошибок сервера, чтобы проверить это, а затем попытайтесь воспроизвести
цепочку шагов, которые привели к ошибке; например, создав отдельную тестовую программу.
И если вы умеете пользоваться отладчиком gdb, то это поможет получить стек вызовов функций (backtrace) для
включения его в отчёт об ошибке, чтобы упростить выявление причин проблемы
разработчикам. Следующие рекомендации бывают полезны, если PHP работает как модуль для веб-сервера Apache:
<itemizedlist>
<listitem>
<para>
Остановите httpd-процессы
</para>
</listitem>
<listitem>
<para>
gdb httpd
</para>
</listitem>
<listitem>
<para>
Вновь остановите httpd-процессы
</para>
</listitem>
<listitem>
<para>
&gt; run -X -f путь_к_httpd.conf
</para>
</listitem>
<listitem>
<para>
Затем скопируйте URL-адрес, который вызвал проблему в браузере
</para>
</listitem>
<listitem>
<para>
&gt; run -X -f путь_к_httpd.conf
</para>
</listitem>
<listitem>
<para>
О событиях core dump сообщит отладчик gdb
</para>
</listitem>
<listitem>
<para>
Введите bt
</para>
</listitem>
<listitem>
<para>
Включите backtrace в отчёт об ошибке и отправьте трассировку по адресу:
<link xlink:href="&url.php.bugs;">&url.php.bugs;</link>
</para>
</listitem>
</itemizedlist>
</para>
<para>
Проверьте, с одинаковыми ли пакетами обработки RegEx скомпилировали PHP и Apache,
если скрипт использует регулярные выражения наподобие тех, с которыми работает
функция <function>preg_match</function> и подобные.
При работе PHP с веб-сервером Apache 1.3.x это выполняется автоматически.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.processing">
<question>
<para>
Unix: Я установил PHP через менеджер пакетов RPMS, но Apache не обрабатывает
PHP-страницы, в чём дело?
</para>
</question>
<answer>
<para>
Раскомментируйте или добавьте каждую или часть следующих строк в файл &httpd.conf;,
если и Apache, и PHP установили из RPM-пакетов:
<programlisting role="apache-conf">
<![CDATA[
# 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
]]>
</programlisting>
И добавьте:
<programlisting role="apache-conf">
<![CDATA[
AddType application/x-httpd-php .php
]]>
</programlisting>
…в глобальные свойства или в свойства того виртуального домена VirtualDomain,
для которого требуется включить поддержку PHP.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.frontpage">
<question>
<para>
Unix: Я исправил Apache модулем FrontPage и теперь PHP не работает.
Получается, PHP несовместим с модулями Apache FrontPage?
</para>
</question>
<answer>
<para>
Нет, PHP отлично работает с модулями FrontPage. Проблема в том, что
патч FrontPage изменяет ряд структур Apache, на которые полагается PHP.
Перекомпиляция PHP командой «make clean ; make» после установки патча FP решит
проблему.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.blankscreen">
<question>
<para>
Unix и Windows: Я установил PHP, но при попытке открыть PHP-файл
в браузере вижу пустой экран.
</para>
</question>
<answer>
<para>
Выберите в браузере опцию «Посмотреть исходный код» и, возможно, увидите свой PHP-код.
Это значит, что веб-сервер не передал скрипт интерпретатору PHP. Что-то
не так с конфигурацией сервера. Внимательно проверьте конфигурацию
сервера на соответствие инструкциям по установке PHP.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.500error">
<question>
<para>
Unix и Windows: Я установил PHP, но когда пытаюсь посмотреть созданную PHP-страницу
в браузере, получаю ошибку 500.
</para>
</question>
<answer>
<para>
Что-то пошло не так, когда сервер попытался запустить PHP. Чтобы увидеть
исходную ошибку, которая возникла, в командной строке перейдите в директорию,
в которой лежит исполняемый файл PHP (<filename>php.exe</filename> в Windows),
и запустите команду <command>php -i</command>. Если есть какие-либо проблемы с
запуском PHP, будет выведена соответствующая ошибка, которая подскажет, что
надо исправить. Если вы увидите экран с HTML-кодом (вывод функции
<function>phpinfo</function>), значит, PHP работает нормально, и проблема
связана с настройками веб-сервера.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.undefinedsyms">
<question>
<para>
Отдельные операционные системы: Я установил PHP без ошибок,
но когда пытаюсь запустить Apache, выводится ошибка:
<programlisting role="shell">
[mybox:user /src/php5] root# apachectl configtest
apachectl: /usr/local/apache/bin/httpd Undefined symbols:
_compress
_uncompress
</programlisting>
</para>
</question>
<answer>
<para>
Это означает, что проблема не в PHP, а в клиентских библиотеках MySQL.
Часть библиотек требуют сборки PHP с опцией <option role="configure">--with-zlib</option>.
Этот нюанс описан в FAQ по MySQL.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.cgierror">
<question>
<para>
Windows: Я установил PHP, но когда пытаюсь открыть страницу скрипта
в браузере, получаю ошибку:
<screen>
<![CDATA[
cgi error:
The specified CGI application misbehaved by not
returning a complete set of HTTP headers.
The headers it did return are:
]]>
</screen>
</para>
</question>
<answer>
<para>
Это сообщение говорит о том, что PHP не справился с выводом данных в стандартный поток ввода-вывода.
Чтобы увидеть понятное сообщение об ошибке, в командной строке перейдите в директорию,
в которой лежит исполняемый файл PHP (<filename>php.exe</filename> в Windows),
и запустите команду <command>php -i</command>. PHP выведет ошибку, которая связана с запуском PHP
и которая подскажет, что требуется исправить. Экран с HTML-кодом, который вывела
функция <function>phpinfo</function>), сообщит, что PHP работает нормально.
</para>
<para>
Как только PHP заработает в командной строке, попробуйте снова получить доступ
к скрипту через браузер. Вероятные причины, по которым скрипт не сработает, состоят в следующем:
</para>
<itemizedlist>
<listitem>
<simpara>
Права на PHP-скрипт, файлы <filename>php.exe</filename>,
<filename>php5ts.dll</filename>, &php.ini; или модули PHP,
которые вы пытаетесь загрузить, не дают анонимному интернет-пользователю
<literal>ISUR_&lt;machinename&gt;</literal> получить к ним доступ.
</simpara>
</listitem>
<listitem>
<simpara>
Файл скрипта отсутствует (или, возможно, лежит не там, где вы предполагали,
относительно корневого каталога веб-сервера). Обратите внимание, что на веб-сервере IIS
можно отловить ошибку, отметив опцию «check file exists» в настройках
«script mappings» в Internet Services Manager. Если файл отсутствует, сервер вместо
этого вернёт ошибку 404. Дополнительное преимущество состоит в том, что IIS будет выполнять
необходимую аутентификацию на основе разрешений NTlanMan в файле сценария.
</simpara>
</listitem>
</itemizedlist>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.phpandiis">
<question>
<para>
Windows: Я всё сделал по инструкции, но PHP и сервер IIS не хотят работать вместе!
</para>
</question>
<answer>
<para>
Убедитесь, что пользователи, которым может потребоваться запуск PHP-скрипта,
имеют права на запуск <filename>php.exe</filename>! Веб-сервер IIS использует анонимного
пользователя, который был создан при инсталляции. Этот пользователь должен иметь
права на запуск файла <filename>php.exe</filename>. Так же, каждый авторизованный
пользователь должен иметь права на запуск <filename>php.exe</filename>.
А для IIS4 нужно сказать, что PHP — это скриптовый движок.
Также прочтите <link linkend="faq.installation.forceredirect">этот FAQ</link>.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.forceredirect">
<question>
<para>
Когда я запускаю PHP как интерфейс CGI к веб-серверам IIS, PWS, OmniHTTPD или Xitami,
получаю ошибку: <literal>Security Alert! PHP CGI
cannot be accessed directly.</literal>.
</para>
</question>
<answer>
<para>
Вы должны установить опцию <link linkend="ini.cgi.force-redirect">
cgi.force_redirect</link> со значением <literal>0</literal>.
По умолчанию она равна <literal>1</literal>. Убедитесь, что она не закомментирована
символом <literal>;</literal>. Как и остальные опции PHP, её настраивают в файле &php.ini;
</para>
<para>
Поскольку опция по умолчанию равна <literal>1</literal>, критически важно убедиться,
что используется именно тот файл &php.ini;, который нужен.
<link linkend="faq.installation.findphpini">Этот FAQ</link> рассказывает об этом подробнее.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.findphpini">
<question>
<para>
Как я могу понять, что файл &php.ini; найден и используется? Складывается впечатление,
что вносимые изменения игнорируются.
</para>
</question>
<answer>
<para>
Для проверки, какой именно файл &php.ini; подключается, запустите функцию
<function>phpinfo</function>. В верхней части вывода будет список с названием
<literal>Configuration File (php.ini)</literal>. Из него можно понять, какой
именно файл &php.ini; подключён. Если указана только директория в <envar>PATH</envar>,
а файл конфигурации не прочитан, то просто скопируйте его в эту директорию.
Если &php.ini; включён в переменную окружения <envar>PATH</envar> — это значит, что он прочитан.
</para>
<para>
Если файл &php.ini; читается и PHP запускается как модуль, то после
внесения изменений в &php.ini; необходимо перезагрузить
веб-сервер.
</para>
<para>
Также смотрите описание <function>php_ini_loaded_file</function>.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.addtopath">
<question>
<para>
Как добавить директорию PHP в переменную <envar>PATH</envar> в Windows?
</para>
</question>
<answer>
<para>
В Windows:
<itemizedlist>
<listitem><para>
Старт → Панель Управления → Система
</para></listitem>
<listitem><para>
Перейдите на вкладку «Дополнительно»
</para></listitem>
<listitem><para>
Нажмите кнопку «Переменные Окружения»
</para></listitem>
<listitem><para>
Посмотрите раздел «Системные Переменные»
</para></listitem>
<listitem><para>
Найдите строку, которая содержит переменную PATH
</para></listitem>
<listitem><para>
Дважды щёлкните по ней мышью
</para></listitem>
<listitem><para>
Допишите в конец строки путь к исполняемому файлу PHP, не забыв добавить перед ним символ ';'
(например <literal>;C:\php</literal>)
</para></listitem>
<listitem><para>
Нажмите OK
</para></listitem>
</itemizedlist>
</para>
<note>
<simpara>
Не забудьте перезагрузиться после описанных действий, а после перезагрузки
проверить, что переменная окружения <envar>PATH</envar> содержит нужный путь.
</simpara>
</note>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.phprc">
<question>
<para>
Как в Windows я могу сделать файл &php.ini; доступным для PHP?
</para>
</question>
<answer>
<para>
Есть несколько способов сделать это. Если вы установили Apache,
обратитесь к документации Apache, иначе вы должны установить
переменную среды <varname>PHPRC</varname>.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.windows-temporary-path">
<question>
<simpara>
Windows: Как при работе PHP с веб-сервером IIS проверить,
что для PHP открыт доступ на запись в каталог временных файлов?
</simpara>
</question>
<answer>
<procedure>
<step>
<simpara>
В Проводнике щёлкните правой кнопкой мыши на каталоге временных файлов — директория,
путь к которой хранит переменная <varname>%TEMP%</varname>, — чтобы через свойства открыть сведения о разрешениях.
Путь к каталогу временных файлов доступен из конфигурации или вывода
функции <function>phpinfo</function>.
</simpara>
</step>
<step>
<simpara>
Веб-сервер IIS будет работать правильно, если пользователю <literal>IIS_User</literal>
предоставили разрешение <literal>Изменение</literal>.
</simpara>
</step>
</procedure>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.apache.multiviews">
<question>
<para>
Можно ли использовать согласование контента Apache, которое настраивается опцией MultiViews,
с PHP?
</para>
</question>
<answer>
<para>
Всё будет работать правильно, если ссылки на PHP-файлы содержат расширения.
Этот FAQ описывает конфигурацию, в которой ссылки не содержат расширения
и требуется согласовывать контент для PHP-файлов из URL-адреса.
Строку <literal>AddType application/x-httpd-php .php</literal>
заменяют на следующие, если это так:
<programlisting role="apache-conf">
<![CDATA[
AddHandler php5-script php
AddType text/html php
]]>
</programlisting>
Это решение не сработает с Apache 1, поскольку модуль PHP не отлавливает
<literal>php-script</literal>.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.requestmethods">
<question>
<para>
Ограничили ли PHP обработкой только HTTP-методов GET и POST?
</para>
</question>
<answer>
<para>
Нет, можно обработать и другие методы запроса, например CONNECT.
Правильный статус ответа нужно посылать через функцию
<function>header</function>. Если нужно, чтобы PHP работал только с
методами GET и POST, необходимо сконфигурировать Apache так:
<programlisting role="apache-conf">
<![CDATA[
<LimitExcept GET POST>
Deny from all
</LimitExcept>
]]>
</programlisting>
</para>
</answer>
</qandaentry>
</qandaset>
</chapter><!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->