Инсталяция
| |||||||||||||||
|
[mybox:user /src/php4] root# apachectl configtest apachectl: /usr/local/apache/bin/httpd Undefined symbols: _compress _uncompress |
cgi error: The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are: |
По умолчанию на 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 filesapache groupapache. Таким образом, вы можете иметь разные файлы php.ini для разных версий Apache на одной машине.
См. также главу о
Возможно это означает, что с 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/
Если ваш скрипт использует функции работы с регулярными выражениями
(
Примем, что вы установили 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, который имеется в этом дистрибутиве.
PHP прекрасно работает с расширениями FrontPage. Проблема в том, что патч FrontPage модифицирует некоторые структуры Apache, на которых основывается PHP. Рекомпиляция PHP (с использованием ’make clean ; make’) после применения патча FP должна решить эту проблему.
6. Unix/Windows: Я установил PHP, но когда пытаюсь получить доступ к файлу PHP-скрипта через браузер, появляется чистый экран.
Выполните в браузере ’view source’ и вы, вероятно, обнаружите, что можно увидеть исходный код вашего PHP-скрипта. Это означает, что web-сервер не отправляет скрипт в PHP для интерпретации. Что-то неверно в конфигурации сервера - проверьте конфигурацию сервера ещё раз в соответствии с инструкциями по установке PHP.
Иногда не всё получается, когда сервер пытается запустить PHP. Чтобы увидеть сообщение об ошибке, из командной строки перейдите в директорию содержащую исполняемый файл PHP (php.exe в Windows) и запустите php -i. Если имеются проблемы с запуском PHP, то будет выведено соответствующее сообщение об ошибке, что даст вам ключ к дальнейшим действиям. Если вы получили экран, заполненный кодами html (вывод функции phpinfo()), то PHP работает, а проблема может иметь отношение к конфигурации вашего сервера, которую нужно перепроверить.
В PHP ничего делать не нужно, а проблема касается клиентских библиотек MySQL.
Некоторые требуют --with-zlib, другие - нет. Это рассматривается также в MySQL FAQ.
[mybox:user /src/php4] root# apachectl configtest
apachectl: /usr/local/apache/bin/httpd Undefined symbols:
_compress
_uncompress
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 (вывод функции
Если PHP работает из командной строки, попытайтесь снова получить доступ к скрипту через браузер. Если не работает по-прежнему, то может быть одно из следующих:
Доступ PHP-скрипта к файлам php.exe, php4ts.dll, php.ini или любым расширениям PHP, которые вы пытаетесь загрузить, таков, что анонимный пользователь internet ISUR_<machinename> не имеет к ним доступа.
Файл скрипта не существует (или, возможно, расположен не там, где вы думаете, относительно корневой директории web root). В IIS вы можете отследить эту ошибку вызвав окно ’check file exists’ при установке отображения скриптов в Internet Services Manager. Если файл скрипта не существует, то сервер возвратит ошибку 404. Дополнительным преимуществом является также то, что IIS выполняет для вас всю необходимую аутентификацию на основе разрешений NTLanMan для файла вашего скрипта.
Убедитесь, что любой пользователь PHP-скрипта имеет права для запуска php.exe! IIS использует пользователя anonymous (анонимного), который добавляется в ходе инсталяции IIS. Этот пользователь должен иметь право на запуск php.exe. Также любой аутентифицированный пользователь должен получать право на выполнение php.exe. И вы должны указать IIS4, что PHP это машина скриптов.
| ||||||
|
Нет комментариев. Ваш будет первым!