PHP 5.4 et Drupal 7

31

J'ai entendu dire que PHP 5.4 est plus rapide que PHP 5.3.

Serait-il correct pour Drupal 7 de fonctionner sous 5.4, ou divers modules contribués pourraient commencer à casser le site?

Quoi qu'il en soit, si j'utilise le cache d'opcode APC, peut-être 5.4, n'offrirait aucun avantage?

Merci

John
la source

Réponses:

28

J'ai moi-même commencé à exécuter Drupal 7 sur PHP 5.4 avec seulement des problèmes mineurs sous forme d'avis et d'avertissements.

En plus de 7.12, vous aurez besoin de ces deux correctifs pour résoudre les problèmes qui provoquent la plainte de PHP:

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

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

L'un de ces correctifs a déjà été appliqué à -dev, il le sera donc en 7.13, et l'autre devrait bientôt arriver. Dans tous les cas auxquels je peux penser immédiatement, la mauvaise pratique à l'origine des avertissements 5.4 a été une mauvaise utilisation des clés de tableau.

La première version de ceci ressemble à ceci:

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

Parfois, l'appel de fonction retourne un tableau ou un objet, dont aucun n'est une clé de tableau valide. En PHP 5.3, ce qui se passe réellement et silencieusement ressemble à ceci:

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

PHP 5.4 prévient cependant que ce n'est peut-être pas ce que vous voulez. La deuxième version est exactement la même, mais l'inverse.

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

ce qui donne un message d'erreur comme

Décalage de chaîne illégal 'a_valid_key'

every $may_be_a_stringest en fait une chaîne, pas un tableau, car les seuls index de chaîne valides sont des entiers.

Comme les problèmes sont faciles à comprendre et que le correctif est (principalement) facile à appliquer, j'ai constaté que dans plusieurs cas, les versions de -dev sont déjà mises à jour ou des correctifs publiés dans la file d'attente, qui sont susceptibles d'entrer rapidement en raison de leur nature simple.

Après quelques tests, je ne pense pas que la version 5.4 soit "dangereuse" à exécuter en production, et j'ai déjà commencé à exécuter mes petits sites personnels dessus. J'encourage les autres à faire de même, afin que nous puissions éviter l'adoption historiquement lente des nouvelles versions de PHP.

Au moment d'écrire ces lignes, la dernière version d'APC, 3.1.9, ne fonctionne pas avec 5.4. J'ai réussi à le construire et à l'utiliser depuis git.

L'utilisation d'APC réduira probablement les performances de la mise à niveau de la version PHP, mais ne la supprimera pas.

Létharion
la source
+1 Je me posais des questions à ce sujet. Avez-vous remarqué des améliorations de performances dans Drupal en général de 5,3 à 5,4? Si cela ne vous dérange pas de publier un peu plus sur vos expériences jusqu'à présent, je serais heureux de récompenser la réponse :)
Clive
En quelques mots avoir APC, ça ne vaut peut-être pas la peine, sauf s'il pourrait y avoir une augmentation significative de la vitesse, ce qui ne semble pas être le cas.
john
@Clive, je n'ai pas encore fait de mesure des performances, bien que j'en ai l'intention (depuis un certain temps maintenant). Y a-t-il quelque chose en particulier que vous vous demandez? :)
Letharion
En quelque sorte, oui :) J'ai joué avec l'idée de passer à la version 5.4, mais comme presque tout ce que je fais semble être Drupal ces jours-ci, je dois être sûr que cela ne va pas rendre ma vie beaucoup plus difficile. Je suis correct de patcher quelques modules par site, mais je crains que cela ne devienne bientôt difficile à maintenir, et nos serveurs de production sont toujours sur 5.3, donc je ne suis pas sûr que cela causerait des problèmes. Tout commentaire que vous auriez sur ce genre de chose, ou un peu d'informations sur les "mauvaises pratiques" qui sont généralement à l'origine des avertissements (pour vous assurer que mes propres modules fonctionnent bien) serait d'une grande aide :)
Clive
J'ai mis à jour la réponse avec ce que j'ai pu. :) Je garde 5.3 installé pour pouvoir facilement revenir en arrière et faire des tests de performances. J'espère que je me souviendrai de revenir ici quand j'y serai arrivé.
Letharion
2

Vous devez éviter PHP 5.4 car il n'y a pas d'APC stable pour cela. Performace pour PHP 5.3 + APC serait supérieur à 5.4.

vamur
la source
Il existe maintenant une version bêta. stackoverflow.com/questions/9611676/…
Letharion