Установка
Этот раздел содержит общие вопросы по установке PHP. PHP доступен практически для любой ОС (за исключением, может быть, MacOS предшествующей OSX) и любого web сервера.
Для установки PHP следуйте инструкциям в Установка и настройка.
- Почему я не должен использовать Apache2 с потоковым MPM в промышленном окружении?
- Unix/Windows: Где должен находиться файл php.ini?
- Unix: Я установил PHP, но каждый раз при загрузке документа я получаю сообщение 'Document Contains No Data' (Документ Не Содержит Данных)! Что происходит?
- Unix: Я установил PHP с помощью RPMS, но Apache не обрабатывает PHP страницы! Что происходит?
- Unix: Я установил заплатку в Apache для расширений FrontPage и неожиданно PHP перестал работать. Неужели PHP не совместим с FrontPage расширениями для Apache?
- Unix/Windows: Я установил PHP, но когда я пытаюсь вызвать PHP скрипт из моего браузера, я получаю пустой экран.
- Unix/Windows: Я установил PHP, но когда я пытаюсь вызвать PHP скрипт из моего браузера, я получаю ошибку сервера 500.
- Некоторые операционные системы: Я установил PHP без ошибок, но когда я пытаюсь запустить Apache, я получаю ошибки "undefined symbol" (неопределенный символ): [mybox:user /src/php5] root# apachectl configtest apachectl: /usr/local/apache/bin/httpd Undefined symbols: _compress _uncompress
- 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:
- Windows: Я следовал всем инструкциям, но так и не смог заставить PHP и IIS работать вместе!
- Когда PHP запускается как CGI в IIS, PWS, OmniHTTPD или Xitami, я получаю следующую ошибку: Security Alert! PHP CGI cannot be accessed directly..
- Как узнать, что мой php.ini был найден и прочтен? Похоже, что мои изменения не были восприняты?
- Как на Windows добавить мою PHP директорию в PATH?
- Как в Windows сделать файл php.ini доступным для PHP?
- Возможно ли использовать согласование содержания в Apache (опция MultiViews) c PHP?
- PHP может обрабатывать только GET и POST запросы?
- Почему я не должен использовать Apache2 с потоковым MPM в промышленном окружении?
-
PHP - это клей. Клей, используемый для построения классных веб-приложений, склеивая дюжины сторонних библиотек и создавая впечатление одного согласованного целого, с помощью интуитивного и легко изучаемого языка. Гибкость и мощь PHP полагается на стабильность и устойчивость используемой платформы. Для склейки вместе ему необходимы работающая ОС, работающий веб-сервер и работающие сторонние библиотеки. Когда что-либо из этого перестает работать, PHP нужны способы определения проблем и их быстрого исправления. Если вы усложняете низлежащую систему, не разделяя полностью потоки выполнения, не выделяя раздельные сегменты памяти и не предоставляя "песочницу" для игры для каждого запроса, то в вашей PHP системе появятся слабые места.
Если вы хотите использовать потоковый MPM, взгляните на конфигурацию с FastCGI, где вы можете запускать PHP в своем собственном пространстве памяти.
- Unix/Windows: Где должен находиться файл php.ini?
-
На Unix по умолчанию он должен находиться в директории /usr/local/lib, определяемой как <install-path>/lib. Большинство людей изменяют его во время компиляции с помощью опции --with-config-file-path Для примера, вы можете задать что-то типа:
Затем скопировать файл php.ini-development из дистрибутива в /etc/php.ini и отредактировать его для ваших локальных нужд.--with-config-file-path=/etc
--with-config-file-scan-dir=PATH
На Windows по умолчанию php.ini находится в Windows директории. Если вы используете веб-сервер Apache, php.ini сначала ищется в директории, где был установлен Apache, например, c:\program files\apache group\apache. В этом случае на одной машине у вас могут быть разные файлы php.ini для разных версий Apache.
Смотрите также главу о конфигурационном файле.
- Unix: Я установил PHP, но каждый раз при загрузке документа я получаю сообщение 'Document Contains No Data' (Документ Не Содержит Данных)! Что происходит?
-
Вероятно, PHP падает по какой-то причине. Для того, чтобы убедиться в этом, просмотрите лог ошибок вашего сервера и затем попытайтесь воспроизвести проблему с помощью небольшого тестового примера. Если вы умеете пользоваться 'gdb', то добавьте трассировку к вашему сообщению об ошибке, это поможет разработчикам точно определить проблему. Если вы используете PHP как модуль Apache, попробуйте что-то типа:
-
Остановите ваши httpd процессы
-
gdb httpd
-
Остановите ваши httpd процессы
-
> run -X -f /path/to/httpd.conf
-
Затем вызовите URL, на котором возникает проблема, из вашего браузера
-
> run -X -f /path/to/httpd.conf
-
Если вы получаете дамп, gdb должен сейчас же сообщить вам об этом
-
введите: bt
-
Вам необходимо включить трассировку в ваше сообщение об ошибке, которое должно быть отправлено с » http://bugs.php.net/
Если ваш скрипт использует функции регулярных выражений (preg_match() и другие), то вам необходимо убедиться, что вы скомпилировали PHP и Apache с одним и тем же пакетом регулярных выражений. Это должно происходить автоматически для PHP и Apache 1.3.x
-
- Unix: Я установил PHP с помощью RPMS, но Apache не обрабатывает PHP страницы! Что происходит?
-
Предполагается, что Apache и PHP оба были установлены из пакетов RPM. Вам требуется в вашем файле httpd.conf раскомментировать или добавить все или некоторые из следующих строк:
# 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
AddType application/x-httpd-php .php
- 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/php5] root# apachectl configtest apachectl: /usr/local/apache/bin/httpd Undefined symbols: _compress _uncompress
-
На самом деле это связано с клиентскими библиотеками MySQL и не имеет никакого отношения к PHP. Одним нужна опция --with-zlib , другим - нет. Это также описано в MySQL FAQ.
-
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 заработает из командной строки, попытайтесь опять вызвать скрипт из браузера. Если он все также не работает, то причина может быть одной из следующих:
- Анонимный пользователь Internet ISUR_<machinename> не имеет доступ к вашему 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.
Смотрите также php_ini_loaded_file().
- Как на Windows добавить мою PHP директорию в PATH?
-
На Windows NT+ и Windows Server 2000+:
Зайдите в Control Panel и откройте системную иконку (Start -> Settings -> Control Panel -> System, или просто Start -> Control Panel -> System for Windows XP/2003)
Перейдите в закладку Advanced
Нажмите кнопку 'Environment Variables'
Смотрите в окошко 'System Variables'
Найдите Path (возможно, вам придется сделать прокрутку, чтобы найти его)
Двойной щелчок на Path
Добавьте в конец вашу PHP директорию, поставив спереди ';' (например ;C:\php)
Нажмите OK
На Windows 98/Me вам необходимо отредактировать файл autoexec.bat:
Откройте Notepad (Start -> Run и введите notepad)
Откройте файл C:\autoexec.bat
Найдите строку с PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;..... и добавьте в конец строки: ;C:\php
Сохраните файл и перезапустите ваш компьютер
Замечание: Обязательно перезагрузитесь после указанных шагов для уверенности, что внесенные вами изменения были применены к PATH.
Прежде в руководстве по 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)
Перейдите в закладку Advanced
Нажмите кнопку 'Environment Variables'
Посмотрите в окошко 'System variables'
Щелкните на 'New' и введите 'PHPRC' как имя переменной и директорию, где находится php.ini, как значение переменной (например, C:\php)
Нажмите OK и перезапустите ваш компьютер
На Windows 98/Me вам необходимо отредактировать файл autoexec.bat:
Откройте Notepad (Start -> Run и введите notepad)
Откройте файл C:\autoexec.bat
Добавьте новую строку в конец файла: set PHPRC=C:\php (замените C:\php на директорию, где находится php.ini). Учтите, что путь не должен содержать пробелы. Например, если вы установили PHP в C:\Program Files\PHP, вы можете вместо этого ввести C:\PROGRA~1\PHP.
Сохраните файл и перезапустите ваш компьютер
- Возможно ли использовать согласование содержания в Apache (опция MultiViews) c PHP?
-
Все работает замечательно, если ссылки на PHP файлы имеют расширение. Этот FAQ рассматривает только случай, когда ссылки на PHP файлы не имеют расширения и вы хотите использовать согласование содержания для отбора PHP файлов из URL без расширений. В этом случае, замените строку AddType application/x-httpd-php .php на:
AddHandler php5-script php AddType text/html php
- PHP может обрабатывать только GET и POST запросы?
-
Нет, можно обрабатывать любые запросы, например, CONNECT. Необходимый статус ответа можно послать с помощью функции header(). Если нужно обрабатывать только GET и POST запросы, то этого можно достигнуть с помощью такой конфигурации Apache:
<LimitExcept GET POST> Deny from all </LimitExcept>
Коментарии
Installing PHP 4 or 5 on Windows Server 2003 x64 results in http error 505. This is not a PHP bug. It is due to running a 32-bit ISAPI DLL under the 64-bit version of IIS 6, as documented here: http://support.microsoft.com/?id=895976
Solution: Flip the Metabase flag for Enable32bitAppOnWin64 as described in http://support.microsoft.com/?id=894435 ,
like this: CSCRIPT ADSUTIL.VBS SET W3SVC/AppPools/Enable32bitAppOnWin64 1
(Alternatively with full path: cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1)
You do not have to restart the whole system make effect of changing the PATH env var. For me (sbs2003) worked automatically.
on older systems you can use
set $Path=%path%;c:\php
command to extend immediately the path var.
I have some additional troubleshooting tips for 53.7, which deals with getting a blank screen on your browser when running a PHP script.
In addition to server misconfiguration, it may also be that PHP isn't configured to output errors to the browser, which is the case if you or your host uses a more secure php.ini. If this is the case, you need to find out where errors are being logged to find out if any errors are preventing normal output from being delivered to the client.
If you have access to php.ini, check the 'display_errors' directive, which is, by default, located under the 'error_reporting' directive. It's helpful to have 'display_errors' on during debugging phases, but best to have it off in production environments.
Related functions: http://php.net/ini_set | http://php.net/error_reporting | http://php.net/error_log
To limit HTTP Request Methods on the Apache server running PHP you should use mod_rewrite or mod_security instead of LimitExcept, to give you more control over the handling of such http errors. Can go in .htaccess file or httpd.conf
# mod_rewrite
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST)$
RewriteRule .* - [F,L]
</IfModule>
# mod_security
<IfModule mod_security.c>
SecFilterSelective REQUEST_METHOD "!^(GET|HEAD|POST)$" "deny,log,status:403"
</IfModule>
You can use the php request method scanner at askapache to see exactly how your server deals with various request methods, and check that your server is configured properly..
http://www.askapache.com/online-tools/request-method-scanner/
One final note to the message below if you are getting the message about not having rights to execute...You need to use IIS right click on the website and choose 'Properties/Home Directory' then on the 'Execute Permissions' combo box you need to choose 'Scripts only'...Click ok...another dialog may appear asking which directories to apply the action too...choose any directories that you intend on using php in and click ok...It should work now...