Как работает PHP?
Интерпретатор PHP находится в Вашем домашнем каталоге на сервере
в подкаталоге cgi-bin/
. Для того, чтобы документы
с расширением .php
воспринимались вебсервером, как PHP
документы, и соответсвенно запускались через PHP интерпретатор, необходимо,
чтобы в файле .htaccess для этого каталога
были строки:
Action php-script /cgi-bin/php
AddHandler php-script .php
Вместо .php
может стоять список любых других расширений
(разделитель - пробел).
Версии PHP
Поскольку для каждого виртуального сервера используется отдельная
копия интерпретатора PHP, то они могут быть
разные у разных пользователей. В каталоге /virt/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());