PHP. Руководство по PHP. 2005
Установка
Глава 68. Установка
Этот раздел содержит общие вопросы по установке PHP.
PHP доступен практически для любой ОС (за исключением, может быть, MacOS предшествующей OSX) и любого web сервера.
Для установки PHP следуйте инструкциям в файле
из дистрибутива. Пользователи Windows также должны прочитать install.txt.
И здесь есть некоторые
полезные советы для пользователей Windows.
1. - Почему я не должен использовать Apache2 с потоковым MPM в эксплуатации?
2. - Unix/Windows: Где должен находиться файл php.ini?
4. - Unix: Я установил PHP, используя RPMS, но Apache не обрабатывает PHP страницы!
Что происходит?
[mybox:user /src/php4] root# apachectl configtest |
cgi error: |
11. - Windows: Я следовал всем инструкциям, но так и не смог заставить PHP и IIS
работать вместе!
13. - Как узнать, что мой php.ini был найден и прочтён?
Похоже, что мои изменения не были восприняты?
14. - Как на Windows добавить мою PHP директорию в PATH?
15. - Как в Windows сделать файл php.ini доступным для PHP?
16. - Возможно ли использовать согласование содержания в Apache (опция MultiViews) c PHP?
Почему я не должен использовать Apache2 с потоковым MPM в эксплуатации?
PHP - это клей. Клей, используемый для построения классных web приложений, склеивая дюжины сторонних библиотек и создавая впечатление 1 согласованного
целого, с помощью интуитивного и легко изучаемого языка.
Гибкость и мощь PHP полагается на стабильность и устойчивость используемой
платформы. Для склейки вместе ему необходимы работающая ОС, работающий web
сервер и работающие сторонние библиотеки. Когда что-либо из этого перестаёт
работать PHP нужны способы определения проблем и их быстрого исправления.
Если вы усложняете низлежащую систему, не разделяя полностью потоки выполнения,
не выделяя раздельные сегменты памяти и не предоставляя "песочницу" для
игры для каждого запроса, то ваша PHP система увязнет в глине.
Если вы всё-таки чувствуете, что должны использовать потоковый MPM,
взгляните на конфигурацию с FastCGI, где вы можете запускать PHP
в своём собственном пространстве памяти.
И наконец, это предупреждение против потокового MPM не настолько остро для
пользователей Windows, так как большинство библиотек на этой платформе
потокобезопасны.
Unix/Windows: Где должен находиться файл php.ini ?
На Unix по умолчанию он должен находиться в директории
/usr/local/lib, определяемой как
<install-path>/lib.
Большинство людей изменяют это во время компиляции с помощью опции
Для примера, вы можете задать что-то типа:
--with-config-file-path=/etc |
Затем скопировать файл php.ini-dist из
дистрибутива в /etc/php.ini и отредактировать
его для ваших локальных потребностей.
--with-config-file-scan-dir=PATH |
На Windows по умолчанию php.ini находится в Windows директории.
Если вы используете Apache web сервер, php.ini сначала ищется в
директории, где был установлен Apache, например c:\program
files\apache group\apache. В этом случае на одной машине
у вас могут быть разные файлы php.ini для разных версий Apache.
Смотрите также главу о конфигурационном файле.
Unix: Я установил PHP, но каждый раз при загрузке документа я получаю
сообщение 'Document Contains No Data' (Документ Не Содержит Данных)!
Что происходит?
Вероятно, PHP падает по какой-то причине. Для того, чтобы убедиться в этом,
просмотрите лог ошибок вашего сервера и затем попытайтесь воспроизвести
проблему с помощью небольшого тестового примера. Если вы умеете пользоваться
'gdb', то добавьте трассировку к вашему сообщению об ошибке, это поможет
разработчикам точно определить проблему.
Если вы используете PHP как модуль Apache попробуйте что-то типа:
Остановите ваши httpd процессы
должно быть отправлено с
Если ваш скрипт использует функции регулярных выражений
(ereg() и компания), то вам необходимо убедиться,
что вы скомпилировали PHP и Apache с одним и тем же пакетом регулярных
выражений. Это должно происходить автоматически для PHP и Apache 1.3.x
Unix: Я установил PHP, используя RPMS, но Apache не обрабатывает PHP страницы!
Что происходит?
Полагая, что Apache и PHP оба были установлены из пакетов RPM,
вам требуется в вашем файле httpd.conf раскомментировать или добавить
все или некоторые из следующих строк:
# Extra Modules |
И добавить:
AddType application/x-httpd-php3.php3 # for PHP 3 |
... в глобальные свойства или в свойства VirtualDomain, для которого
вы хотите иметь поддержку PHP.
Unix: Я установил PHP 3 используя RPMS, но он не компилируется с поддержкой
нужной мне базы данных! Что происходит?
Из-за того, как построен PHP 3, собрать полный и гибкий RPM для PHP не легко.
Эта проблема решена в PHP4. Для PHP 3 мы рекомендуем способ, описанный в
файле INSTALL.REDHAT из дистрибутива PHP. Если вы всё-таки настаиваете
на использовании варианта с RPM для PHP 3, читайте далее...
Те, кто собирает RPM пакеты, настраивают RPMS для установки без поддержки
баз данных для упрощения установок и
потому что RPMS использует /usr/ вместо стандартной /usr/local/ директории
для файлов. Вам необходимо указать в спек файле RPM какие базы данных
поддерживать и где находится ваш сервер баз данных.
Следующий пример объясняет процесс добавления поддержки для популярного
сервера баз данных MySQL, используя mod установку для Apache.
Конечно, всё это может быть применено для любого сервера баз данных, который
PHP поддерживает. Для этого примера, мы будем полагать, что вы установили
MySQL и Apache полностью с RPMS.
Во-первых, удалите mod_php3 :
rpm -e mod_php3 |
rpm -Uvh mod_php3-3.0.5-2.src.rpm |
/usr/src/redhat/SPECS/mod_php3.spec
В секции %build добавьте поддержку нужной вам базы данныз и укажите путь
Для MySQL вы добавите
--with-mysql=/usr
Секция %build будет выглядеть как что-то типа следующего:
./configure --prefix=/usr \ |
rpm -bb /usr/src/redhat/SPECS/mod_php3.spec |
rpm -ivh /usr/src/redhat/RPMS/i386/mod_php3-3.0.5-2.i386.rpm |
Перезапустите Apache и теперь у вас есть PHP 3 с поддержкой MySQL,
установленный из RPM. Заметьте, что на много проще просто собрать
PHP 3 из дистрибутива и следовать инструкциям в файле
INSTALL.REDHAT дистрибутива.
Unix: Я установил заплатку в Apache для расширений FrontPage и
неожиданно PHP перестал работать.
Неужели PHP не совместим с FrontPage расширениями для Apache?
Нет, PHP прекрасно работает с FrontPage расширениями.
Проблема в том, что FrontPage заплатка изменяет некоторые важные для
PHP структуры. Перекомпиляция PHP (выполняя 'make clean ; make')
после установки FP заплатки должна решить эту проблему.
Unix/Windows: Я установил PHP, но когда я пытаюсь вызвать PHP скрипт из моего
браузера, я получаю пустой экран.
Сделайте просмотр исходника ('view source') в web браузере
и, вероятно, вы увидите исходный код вашего PHP скрипта.
Это означает, что web сервер не послал скрипт PHP для интерпретации.
Что-то не так с конфигурацией сервера, проверьте конфигурацию сервера
согласно установочным инструкциям PHP.
Unix/Windows: Я установил PHP, но когда я пытаюсь вызвать PHP скрипт из моего
браузера, я получаю ошибку сервера 500.
Что-то произошло когда сервер пытался выполнить PHP.
Чтобы увидеть более вразумительное сообщение об ошибке,
используя командную строку, перейдите в директорию где находится
исполняемый файл PHP (php.exe на Windows)
и запустите php -i. Если при запуске PHP
возникли какие-либо проблемы, то появится соответствующее сообщение
об ошибке, которое может дать вам понять что делать дальше.
Если вы получаете экран, заполненый HTML кодом (вывод функции
phpinfo()), то PHP работает и ваша
проблема возможно связана с конфигурацией вашего сервера, которую
вам необходимо проверить.
Некоторые операционные системы: Я установил PHP без ошибок,
но когда я пытаюсь запустить Apache, я получаю ошибки "undefined symbol"
(неопределённый символ):
[mybox:user /src/php4] root# apachectl configtest |
На самом деле это связано с клиентскими библиотеками MySQL и не имеет
никакого отношения к PHP. Одним нужна опция --with-zlib, другим - нет. Это также
описано в MySQL FAQ.
Windows: Я установил PHP, но когда я пытаюсь вызвать PHP скрипт из моего
браузера, я получаю ошибку:
cgi error: |
Это сообщение об ошибке означает, что PHP не смог вывести
абсолютно ничего. Чтобы увидеть более вразумительное сообщение об ошибке,
используя командную строку, перейдите в директорию, где находиться
испольняемый файл PHP (php.exe на Windows) и
запустите php -i. Если при запуске PHP
возникли какие-либо проблемы, то появится соответствующее сообщение
об ошибке, которое может дать вам понять что делать дальше.
Если вы получаете экран, заполненый HTML кодом (вывод фиункци
phpinfo() функции), то PHP работает.
Как только PHP работает из командной строки, попытайтесь опять вызвать
скрипт из браузера. Если он все также не работает, то причина может быть
одна из следующих:
Анонимный пользователь Internet не имеет доступ к вашему PHP скрипту,
php.exe, php4ts.dll,
php.ini или любому загружаемому PHP расширению из за прав доступа,
установленных на эти файлы.
должен быть, относительно вашей корневой web директории).
Заметьте, что для IIS вы можете поймать эту ошибку пометив 'check file
exists' при настройке ассоциирования скриптов (script mappings) в
Администраторе Internet Сервисов (Internet Services Manager).
Если файл скрипта не существует, то сервер выдаст ошибку 404.
Также допольнительная польза в том, что IIS будет выполнять
необходимую вам аутентификацию, основываясь на NTLanMan правах
доступа на ваш скрипт.
Windows: Я следовал всем инструкциям, но так и не смог заставить PHP и IIS
работать вместе!
Убедитесь что все пользователи, кому необходимо запускать PHP скрипты,
имеют право выполнять php.exe !
IIS использует анонимного пользователя, который добавлен во время
установки IIS. Этот пользователь должен иметь права на
php.exe. Также любому аутентифицированному пользователю
будут нужны права на выполнение php.exe.
И для IIS4 вам необходимо сказать ему, что PHP является скриптовой системой.
Также вам захочется прочитать
это.
Когда PHP запускается как CGI в IIS, PWS, OmniHTTPD или Xitami,
я получаю следующую ошибку: Security Alert! PHP CGI
cannot be accessed directly..
Вы должны установить директиву - cgi.force_redirect в 0.
По умолчанию она установлена в 1, поэтому убедитесь, что
директива не закоментирована (с ;). Как все директивы,
она задается в php.ini
Так как значение по умолчанию 1, то очень важно
быть уверенным на 100%, что был прочитан верный php.ini файл.
Для подробностей читайте - здесь.
Как узнать, что мой php.ini был найден и прочтён?
Похоже, что мои изменения не были восприняты?
Чтобы убедиться, что PHP прочитал ваш php.ini, вызовите
phpinfo() и недалеко от начала будет находиться
строка, озаглавленная Configuration File (php.ini).
Она скажет вам где PHP ищет php.ini и был ли файл прочитан.
Если указана только директория, то файл не был прочитан и вы должны поместить
ваш php.ini в эту директорию. Если php.ini включён в PATH, то он
был прочитан.
Если php.ini был прочитан и вы запускаете PHP как модуль, то
не забудьте перезапустить ваш web сервер после внесения изменений в
php.ini.
Как на Windows добавить мою PHP директорию в PATH?
На Windows NT, 2000, XP и 2003:
Идите в Control Panel и откройте системную иконку (Start -> Settings
-> Control Panel -> System, или просто Start -> Control Panel
-> System for Windows XP/2003)
;C:\php)
На Windows 98/Me вам необходимо отредактировать файл
autoexec.bat :
Откройте Notepad (Start -> Run и введите notepad)
в конец строки:
;C:\php
Прежде в руководстве по PHP рекомендовалось копировать файлы в системную
директорию Windows, так как эта директория
(C:\Windows, C:\WINNT, и т.п.)
входит в системный PATH по умолчанию. Копирование файлов в системную директорию
Windows давно уже противопоказывается и может вызвать проблемы.
Как в Windows сделать файл php.ini доступным для PHP?
Для этого есть несколько путей. Если вы используете Apache, то читайте
инструкции по его установке (Apache 1, Apache 2),
в ином случае, вы должны установить переменную окружения
PHPRC:
На Windows NT, 2000, XP и 2003:
Идите в Control Panel и откройте системную иконку (Start -> Settings
-> Control Panel -> System, или просто Start -> Control Panel
-> System for Windows XP/2003)
где находится php.ini, как значение переменной (например
C:\php)
На Windows 98/Me вам необходимо отредактировать файл
autoexec.bat :
Откройте Notepad (Start -> Run и введите notepad)
C:\php (замените C:\php на директорию,
где находится php.ini)
Возможно ли использовать согласование содержания в Apache
(опция MultiViews) c PHP?
Всё работает замечательно, если линки к PHP файлам имеют расширение.
Этот FAQ рассматривает только случай, когда линки к PHP файлам не имеют расширения
и вы хотите использовать согласование содержания для отбора PHP файлов из
URL без расширений.
В этом случае, замените строку AddType application/x-httpd-php
.php на:
# PHP4 |
Это решение не работает в Apache 1, так как в нём PHP модуль не ловит
php-script.
Вопросы по Базам Данных
Проблемы Сборки