Используемая версия PHP. Совместимость PHP 5 и PHP 4.

Тарифы

Хостинг сайтов
(PHP, MySQL, SSL, Perl)

НАЧАЛО 50 Мб 49 руб.
РАЗВИТИЕ 200 Мб 99 руб.
ПРОГРЕСС 500 Мб 164 руб.
ЭВОЛЮЦИЯ 1500 Мб 284 руб.
ЛИДЕРСТВО 3000 Мб 449 руб.

Хостинг электронной почты
(SMTP, POP3, IMAP, веб-интерфейс)

ПОЧТА-НАЧАЛО 100 Мб 59 руб.
ПОЧТА-РАЗВИТИЕ 200 Мб 84 руб.
ПОЧТА-ПРОГРЕСС 500 Мб 134 руб.

Регистрация доменов

домен зоны RU 1 год 570 руб.
домен зоны COM 1 год 570 руб.
домен зоны ORG 1 год 570 руб.
домен зоны NET 1 год 570 руб.

Используемая версия PHP

В данный момент основной веткой проекта PHP является версия 5. На нашем хостинге поддерживается текущий PHP 5 Stable Release. Некоторые компании все еще используют для хостинга PHP версии 4, объясняя это необходимостью поддерживать код, наработанный для более старой версии, тем паче что для PHP 4 все еще выпускаются новые релизы. Но мы считаем поддержку PHP 4 по умолчанию неоправданной, поскольку уже ведется разработка PHP 6, и сохранение старых вариантов кода сейчас может вызвать лишь дополнительные затруднения в будущем.

К тому же PHP 5 разрабатывался исходя из принципа максимальной обратной совместимости с PHP 4, и обеспечить ее вполне реально с помощью существующих директив конфигурации. Но в любом правиле бывают исключения, поэтому мы всегда готовы рассмотреть вопрос установки PHP 4 персонально для отдельного клиента, если его проект требует непременного использования PHP этой версии и обратную совместимость нельзя обеспечить средствами доступными в PHP 5. Тем более, что каждый сайт у нас обслуживается отдельным экземпляром Apache и установка PHP 4 не создаст никаких проблем и конфликтов с другими сайтами хостинга.

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

Вопросы совместимости PHP 5 и PHP 4

Основной переработке в PHP 5 подверглась объектная модель. Соответственно, если Вы широко использовали методы ООП в своих проектах на PHP 4, то при переходе на PHP 5 могут возникнуть некоторые проблемы. Путей решения два: первый - сделать через панель управления заявку на включение опции zend.ze1_compatibility_mode для Вашего сайта, это действие переведет работу Zend Engine в режим совместимости с PHP 4. Второй способ (наиболее верный) - исправление несовместимых участков исходного кода.

Итак, на что же следует обратить основное внимание при миграции с PHP 4 на PHP 5?

Различие в работе strrpos() и strripos() - эти функции возвращают позицию последнего вхождения подстроки в заданную строку. В PHP 4 для поиска использовался только первый символ задаваемой подстроки. То есть пример strrpos('HOSTING','OCT') в PHP 4 возвращал значение 1, а в PHP 5 возвращает значение false. strripos() действуте точно также, только без учета регистра.

Неправильное использование смещения внутри строки вызывает E_ERROR вместо E_WARNING Например: $stroka = 'string_of_text'; unset($stroka[0]); - то есть код ошибки в результате выдается более жесткий, соответственно те скрипты, которые раньше работали, выдавая E_WARNING, теперь могут стать неработоспособными вследствие E_ERROR.

Функция array_merge() в качестве аргументов принимает только массивы - в PHP 4 можно в качестве аргументов помимо массива задавать переменные типа string или integer. В PHP 5 это вызовет ошибку E_WARNING. В качестве решения проблемы можно порекомендовать использовать приведение типов к array при задании аргументов для array_merge():

$first = 'QWERTY';
$second = array(1 => 'ASDFGH');
$result = array_merge((array)$first, $second);

Переменная сервера PATH_TRANSLATED не определяется неявно в PHP 5 - в отличие от PHP 4, где ей присваивается то же значение, что и переменной сервера SCRIPT_FILENAME (когда PATH_TRANSLATED не определяется явно в Apache). Применительно к нашему хостингу, $_SERVER['SCRIPT_FILENAME'] выдаст полный путь к исполняемому скрипту, а $_SERVER['PATH_TRANSLATED'] выдаст пустое значение.

Объект без свойств больше не считается "пустым". Поясним на примере:

Имена классов/методов возвращаются в том регистре, в котором были объявлены. Это касается результатов, выдаваемых функциями get_class(), get_parent_class() и get_class_methods(), а также магическими константами __CLASS__, __METHOD__ и __FUNCTION__. В PHP 4 все они выдавали результат в нижнем регистре. В PHP 5 регистр символов при выдаче результата такой же, какой использовался при объявлениии функции, класса или метода.

Изменения в работе функции ip2long(). Когда в качестве аргумента функции ip2long() передается неправильный ip-адрес, то результатом работы функции в PHP 5 будет FALSE, а не -1, как это было в PHP 4. Пример:

var_dump(ip2long('194.135.104.6'));
Результат:int(-1031313402)

var_dump(ip2long('194.135.256.6'));
Результат:bool(false)

Изменения в работе функции include() - предположим, в основном файле PHP вы используете функцию include('incfile.php'). В файле incfile.php объявляется некоторая функция testfunction(). Затем, в основном файле PHP команда include('incfile.php') встречается еще раз. То есть incfile.php включается дважды. В PHP 4 все отработало бы нормально, а вот PHP 5 выдает фатальную ошибку, сообщая, что функция testfunction() уже объявлена. В связи с этим рекомендуется использовать include_once() вместо include(). Кроме того, функции, объявленные во включенном файле, могут использоваться и в основном файле, вне зависимости от того, объявлены они до return() или после.

Более подробную информацию о совместимости между PHP 4 в PHP5 читайте в руководстве по PHP на странице Приложение B. Миграция с PHP 4 на PHP 5.