mirror of
https://github.com/php/doc-ru.git
synced 2025-08-16 18:22:04 +00:00
542 lines
26 KiB
XML
542 lines
26 KiB
XML
<?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><установочный-путь>/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>
|
||
> run -X -f путь_к_httpd.conf
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
Затем скопируйте URL-адрес, который вызвал проблему в браузере
|
||
</para>
|
||
</listitem>
|
||
<listitem>
|
||
<para>
|
||
> 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_<machinename></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
|
||
-->
|