PHP 5.4 и Drupal 7


31

Я слышал, что PHP 5.4 быстрее, чем PHP 5.3.

Было бы нормально, чтобы Drupal 7 работал под 5.4, или различные модули могут начать ломать сайт?

В любом случае, если я использую кэш кода операции APC, может быть, 5.4, не принесет ли вообще никакой выгоды?

Благодарность

Ответы:


28

Я начал запускать Drupal 7 на PHP 5.4 самостоятельно, с небольшими проблемами в форме уведомлений и предупреждений.

В дополнение к 7.12 вам понадобятся эти два исправления, чтобы исправить проблемы, вызывающие жалобу PHP:

http://drupal.org/files/menu-link-save-1338282-15-d7.patch

http://drupal.org/files/database-query-clone-1414412-11-d7_0.patch

Один из этих патчей уже был применен к -dev, поэтому будет в 7.13, а другой, скорее всего, скоро появится. Во всех случаях, о которых я могу сразу подумать, плохая практика, вызывающая предупреждения 5.4, - это неправильное использование ключей массива.

Первая версия этого выглядит так:

$some_key = function_call();
return $some_array[$some_key];

Иногда вызов функции возвращает массив или объект, ни один из которых не является допустимым ключом массива. В PHP 5.3 то, что на самом деле происходит тихо, выглядит так:

$some_key = function_call();
return $some_array[(string)$some_key];

PHP 5.4, однако, предупреждает, что это может быть не то, что вы хотите. Вторая версия точно такая же, но наоборот.

$some_key = 'a_valid_key';
$may_be_a_string = function_call();
return $may_be_a_string[$some_key];

который выдает сообщение об ошибке, подобное

Недопустимое смещение строки 'a_valid_key'

всякий раз, когда $may_be_a_stringна самом деле является строкой, а не массивом, поскольку единственными допустимыми строковыми индексами являются целые числа.

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

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

На момент написания статьи последняя версия APC, 3.1.9, не работает с 5.4. Я успешно построил и использовал его из GIT, хотя.

Использование APC, вероятно, уменьшит выигрыш в производительности при обновлении версии PHP, но не удалит ее.


+1 Мне было интересно об этом. Заметили ли вы повышение производительности в Drupal в целом при переходе с 5.3 на 5.4? Если бы вы не возражали публиковать немного больше о вашем опыте, я был бы рад наградить вас ответом :)
Клайв

В нескольких словах, имеющих APC, не стоит никаких проблем, за исключением случаев, когда может быть значительное увеличение скорости, что, похоже, не так.
Джон

@Clive, мне еще предстоит сделать измерения производительности, хотя я собираюсь (уже довольно давно). Есть что-то конкретное, о чем вы задумывались? :)
Летарион

Вроде как, да :) Я играл с идеей обновления до 5.4, но так как почти все, что я делаю, в эти дни кажется Drupal, я должен быть уверен, что это не сделает мою жизнь слишком сложной. Я в порядке с исправлением нескольких модулей для каждого сайта, но я боюсь, что скоро его будет сложно поддерживать, и наши производственные серверы все еще работают на 5.3, поэтому я не уверен, что это вызовет какие-либо проблемы. Любые комментарии, которые у вас были по поводу такого рода вещей, или небольшая информация о том, что такое «плохая практика», которая обычно вызывает предупреждения (чтобы убедиться, что мои собственные модули в порядке), очень помогли бы :)
Clive

Я обновил ответ с тем, что я мог. :) У меня установлен 5.3, чтобы я мог легко переключиться назад и провести тестирование производительности. Надеюсь, я не забуду вернуться сюда, когда доберусь до этого.
Летарион

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.