This version of the page http://www.colocall.net/colocation/php.html (0.0.0.0) stored by archive.org.ua. It represents a snapshot of the page as of 2010-04-29. The original page over time could change.
ColoCall | Особенности работы PHP


Особенности работы PHP

  1. Модуль Apache или внешнее приложение?
  2. Как изменить настройки?
  3. Как работает PHP?
  4. PHP и кодировки
  5. Версии PHP
  6. Обращение к переменным окружения (environment)
  7. HTTP аутентификация через PHP

1. Модуль Apache или внешнее приложение?

PHP у нас работает как CGI приложение, а НЕ как модуль Apache.


2. Как изменить настройки?

Глобальные настройки, описанные в системном файле php.ini, можно изменить в файле .user.ini, расположенном в текущем каталоге. Все описанные в нём настройки распространяются на скрипты, находящиеся в текущем каталоге и его подкаталогах. Например, если для работы скриптов нужно разрешить short_open_tag, то в файле ~/htdocs/.user.ini необходимо прописать:

short_open_tag = On


3. Как работает PHP?

Интерпретатор PHP находится в Вашем домашнем каталоге на сервере в подкаталоге cgi-bin/. Для того, чтобы документы с расширением .php воспринимались вебсервером, как PHP документы, и соответсвенно запускались через PHP интерпретатор, необходимо, чтобы в файле .htaccess для этого каталога были строки:

Action php-script /cgi-bin/php
AddHandler php-script .php

Вместо .php может стоять список любых других расширений (разделитель - пробел).

4. PHP и кодировки

На перекодировку PHP документов влияет файл .htaccess в подкаталоге cgi-bin/ (другими словами, в том каталоге, где находится интерпретатор, а не документы).


5. Версии PHP

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

Узнать версию своего PHP и некоторые его параметры можно выполнением простого скрипта:

<?php
phpinfo();
?>

Начиная с версии PHP 5.0.5, а также 5.1, разработчики PHP усилили требования к коду. В частности, это касается работы функций, которые требуют в качестве аргументов - ссылки на переменные, массивы и т.п.

В частности, код приведённый ниже и нормально работающий на PHP 4.4, начиная с версии PHP 5.0.5 выдаёт сообщение об ошибке вида: Fatal error: Only variables can be passed by reference in....

function Foo(&$data) {
// do some code with $data
}

function Bar() {
return "Hello world";
}

echo Foo(Bar());

Теперь при вызове функции Foo(), требующей передачи ей ссылки на переменную (для непосредственной её модификации в функции) с аргументом, являющимся другой функцией, PHP 5.0.5 отказывается выполнять этот код по причине его "неграмотности".

Для решения данной проблемы необходимо немного видоизменить код, вводя временную переменную. Правильный (и к тому же работающий на PHP 5.0.5, а также 5.1) вызов функции выглядит так:

$tmp_var = Bar();
echo Foo($tmp_var);

Или в сокращённом варианте:

echo Foo($tmp_var = Bar());


6. Обращение к переменным окружения (environment)

Для доступа к переменным окружения (environment) не создаются автоматически одноименные переменные PHP. Для доступа к ним нужно использовать функцию getenv. Примеры использования смотрите на www.php.net/manual/en/function.getenv.php. Там есть пример получения IP адреса клиента, который будет правильно работать и у нас.


7. HTTP аутентификация через PHP

HTTP аутентификацию можно использовать только в PHP, работающем, как модуль Apache, поэтому у нас ее использовать нельзя.