Учебник РНР
Назад Вперёд

Глава 48. Инсталяция

В этом разделе собраны общие вопросы об установке PHP. PHP имеется почти для всех операционных систем/ОС (кроме, может быть, MacOS до OSX) и почти для любого web-сервера.

При установке PHP следуйте инструкциям файла INSTALL, имеющегося в дистрибутиве. Пользователям Windows нужно также прочесть файл install.txt. Несколько подсказок для пользователей Windows можно также найти здесь.

1. Unix/Windows: Где у меня должен находиться файл php.ini?
2. Unix: Я установил PHP, но каждый раз при загрузке документа я получаю сообщение 'Document Contains No Data'! Почему?
3. Unix: Я установил PHP с использованием RPMS, но Apache не обрабатывает PHP-страницы! Почему?
4. Unix: Я установил PHP с использованием RPMS, но он не компилирует с поддержкой БД, нужной мне! Какова причина?
5. Unix: Я вставил на Apache патч расширений FrontPage, и внезапно PHP перестал работать. Совместим ли PHP с расширениями FrontPage для Apache?
6. Unix/Windows: Я установил PHP, но когда пытаюсь получить доступ к файлу PHP-скрипта через браузер, появляется чистый экран.
7. Unix/Windows: Я установил PHP, но когда пытаюсь получить доступ к файлу PHP-скрипта через браузер, получаю ошибку 500 сервера.
8. Некоторые ОС: Я установил PHP без ошибок, но при попытке старта Аpache я получаю ошибки undefined symbol:
[mybox:user /src/php4] root# apachectl configtest
 apachectl: /usr/local/apache/bin/httpd Undefined symbols:
  _compress
  _uncompress
9. Windows: Я установил PHP, но при доступе к файлу PHP-скрипта из браузера я получаю ошибку:
cgi error:
 The specified CGI application misbehaved by not
 returning a complete set of HTTP headers.
 The headers it did return are:
10. Windows: Я выполнил все инструкции, но PHP и IIS - таки да - не работают вместе!

1. Unix/Windows: Где у меня должен находиться файл php.ini?

По умолчанию на UNIX он  должен быть в директории /usr/local/lib, то есть в <install-path>/lib. Многие хотели бы изменить это положение на этапе компиляции с помощью флага --with-config-file-path. Вы можете, например, записать так:
--with-config-file-path=/etc

а затем скопировать php.ini-dist из дистрибутива в /etc/php.ini и отредактировать его, чтобы сделать необходимые локальные изменения.

На Windows путь по умолчанию для php.ini это директория Windows. Если вы используете Apache web-сервер, php.ini ищется сначала в директории установки Apache, например, c:\program files\apache group\apache. Таким образом вы можете иметь разные файлы php.ini для разных версий Apache на одной машине.

См. также главу о файле конфигурации.

2. Unix: Я установил PHP, но каждый раз при загрузке документа я получаю сообщение 'Document Contains No Data'! Почему?

Возможно это означает, что с PHP есть какие-то проблемы и что имеется перевод ядра в дамп. Посмотрите в error log вашего сервера, не это ли причина, а затем попытайтесь воспроизвести проблему небольшим тестовым заданием. Если вы знаете , как использовать 'gdb', это поможет вам, если вы можете предоставить ваше сообщение о bug для отслеживания разработчиками точного местоположения проблемы. Если вы используете PHP как Apache-модуль, попытайтесь сделать что-нибудь типа:

  • Остановите ваши httpd-процессы

  • gdb httpd

  • Остановите ваши httpd-процессы

  • > run -X -f /path/to/httpd.conf

  • Запустите URL, вызвавший проблему, в вашем браузере

  • > run -X -f /path/to/httpd.conf

  • Если вы получаете дамп ядра, gdb должна сообщить вам об этом сейчас

  • type: bt

  • Вы должны включить вашу трассировку в ваше сообщение о bug. Это всё нужно отправить по адресу http://bugs.php.net/

Если ваш скрипт использует функции работы с регулярными выражениями (ereg() и компания), вам необходимо убедиться, что вы скомпилировали PHP и Apache с одним и тем же пакетом регулярных выражений. Это должно выполняться автоматически для PHP и Apache 1.3.x.

3. Unix: Я установил PHP с использованием RPMS, но Apache не обрабатывает PHP-страницы! Почему?

Примем, что вы установили Apache и PHP из RPM-пакетов, тогда вы должны раскомментировать или добавить некоторые или все следующие строки в ваш файл http.conf:
# Extra Modules
AddModule mod_php.c
AddModule mod_php3.c
AddModule mod_perl.c

# Extra Modules
LoadModule php_module         modules/mod_php.so
LoadModule php3_module        modules/libphp3.so     /* для PHP 3 */
LoadModule php4_module        modules/libphp4.so     /* для PHP 4 */
LoadModule perl_module        modules/libperl.so

и добавить:

AddType application/x-httpd-php3 .php3    /* для PHP 3 */
AddType application/x-httpd-php .php      /* для PHP 4 */

... в глобальные свойства/global properties или в свойства VirtualDomain, в который вы хотите добавить поддержку PHP.

4. Unix: Я установил PHP с использованием RPMS, но он не компилирует с поддержкой БД, нужной мне! Какова причина?

Из-за способа построения PHP 3 нелегко построить/build полностью гибкий PHP RPM. Этот вопрос адресован в PHP 4. Для PHP 3 мы в настоящее время советуем использовать механизм, описанный в файле INSTALL.REDHAT в дистрибутиве PHP. Если вы продолжаете настаивать не необходимости использования RPM-версии PHP 3, прочтите...

Упаковщики RPM устанавливают RPMS для инсталяции без поддержки БД, чтобы упростить процесс установки и из-за того, что RPMS использует для файлов директорию /usr/ вместо стандартной /usr/local/. Вы должны сообщить RPM spec-файлу, какие БД поддерживать, и размещение верхнего уровня вашего сервера БД.

Следующий пример объяснит процесс добавления поддержки для популярного сервера MySQL через использование mod-инсталяции Apache.

Самом собой, вся эта информация может уточняться для любого сервера БД, поддерживаемого PHP. Мы примем для данного примера, что вы установили MySQL и Apache полностью с помощью RPMS.

  • Сначала удалите mod_php3 :
    rpm -e mod_php3

  • Затем получите исходный rpm и УСТАНОВИТЕ его, НЕ --rebuild
    rpm -Uvh mod_php3-3.0.5-2.src.rpm

  • Далее, отредактируйте файл /usr/src/redhat/SPECS/mod_php3.spec

    В разделе %build добавьте поддержку нужной вам БД и путь/path.

    Для MySQL вы добавляете
    --with-mysql=/usr \

    Раздел %build будет выглядеть примерно так:

    ./configure --prefix=/usr \
    	--with-apxs=/usr/sbin/apxs \
    	--with-config-file-path=/usr/lib \
    	--enable-debug=no \
    	--enable-safe-mode \
    	--with-exec-dir=/usr/bin \
    	--with-mysql=/usr \
    	--with-system-regex
  • После того как эти изменения внесены, постройте бинарный rpm так:
    rpm -bb /usr/src/redhat/SPECS/mod_php3.spec

  • Затем установите rpm
    rpm -ivh /usr/src/redhat/RPMS/i386/mod_php3-3.0.5-2.i386.rpm

Не забудьте рестартовать Apache, и теперь вы получили PHP 3 с поддержкой MySQL с использованием RPM. Заметьте, что, вероятно, намного проще просто выполнить построение/build из дистрибутивного tarball PHP 3 и следовать инструкциям файла INSTALL.REDHAT, который имеется в этом дистрибутиве.

5. Unix: Я вставил на Apache патч расширений FrontPage, и внезапно PHP перестал работать. Совместим ли PHP с расширениями FrontPage для Apache?

PHP прекрасно работает с расширениями FrontPage. Проблема в том, что патч FrontPage модифицирует некоторые структуры Apache, на которых основывается PHP. Рекомпиляция PHP (с использованием 'make clean ; make') после применения патча FP должна решить эту проблему.

6. Unix/Windows: Я установил PHP, но когда пытаюсь получить доступ к файлу PHP-скрипта через браузер, появляется чистый экран.

Выполните в браузере 'view source' и вы, вероятно, обнаружите, что можно увидеть исходный код вашего PHP-скрипта. Это означает, что web-сервер не отправляет скрипт в PHP для интерпретации. Что-то неверно в конфигурации сервера - проверьте конфигурацию сервера ещё раз в соответствии с инструкциями по установке PHP.

7. Unix/Windows: Я установил PHP, но когда пытаюсь получить доступ к файлу PHP-скрипта через браузер, получаю ошибку 500 сервера.

Иногда не всё получается, когда сервер пытается запустить PHP. Чтобы увидеть сообщение об ошибке, из командной строки перейдите в директорию содержащую исполняемый файл PHP (php.exe в Windows) и запустите php -i. Если имеются проблемы с запуском PHP, то будет выведено соответствующее сообщение об ошибке, что даст вам ключ к дальнейшим действиям. Если вы получили экран, заполненный кодами html (вывод функции phpinfo()), то PHP работает, а проблема может иметь отношение к конфигурации вашего сервера, которую нужно перепроверить.

8. Некоторые ОС: Я установил PHP без ошибок, но при попытке старта Аpache я получаю ошибки undefined symbol:
[mybox:user /src/php4] root# apachectl configtest
 apachectl: /usr/local/apache/bin/httpd Undefined symbols:
  _compress
  _uncompress

В PHP ничего делать не нужно, а проблема касается клиентских библиотек MySQL. Некоторые требуют --with-zlib, другие - нет. Это рассматривается также в MySQL FAQ.

9. Windows: Я установил PHP, но при доступе к файлу PHP-скрипта из браузера я получаю ошибку:
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, то будет выведено соответствующее сообщение об ошибке, что даст вам ключ к дальнейшим действиям. Если вы получили экран, заполненный кодами html (вывод функции phpinfo()), то PHP работает.

Если PHP работает из командной строки, попытайтесь снова получить доступ к скрипту через браузер. Если не работает по-прежнему, то может быть одно из следующих:

  • Доступ PHP-скрипта к файлам php.exe, php4ts.dll, php.ini или любым расширениям PHP, которые вы пытаетесь загрузить, таков, что анонимный пользователь internet ISUR_<machinename> не имеет к ним доступа.

  • Файл скрипта не существует (или, возможно, расположен не там, где вы думаете, относительно корневой директории web root). В IIS вы можете отследить эту ошибку вызвав окно 'check file exists' при установке отображения скриптов в Internet Services Manager. Если файл скрипта не существует, то сервер возвратит ошибку 404. Дополнительным преимуществом является также то, что IIS выполняет для вас всю необходимую аутентификацию на основе разрешений NTLanMan для файла вашего скрипта.

10. Windows: Я выполнил все инструкции, но PHP и IIS - таки да - не работают вместе!

Убедитесь, что любой пользователь PHP-скрипта имеет права для запуска php.exe! IIS использует пользователя anonymous (анонимного), который добавляется в ходе инсталяции IIS. Этот пользователь должен иметь право на запуск php.exe. Также любой аутентифицированный пользователь должен получать право на выполнение php.exe. И вы должны указать IIS4, что PHP это машина скриптов.


НазадОглавление Вперёд
Вопросы о базах данных ВверхПроблемы построения