PHP 5.4 i Drupal 7

31

Słyszałem, że PHP 5.4 jest szybszy niż PHP 5.3.

Czy dobrze byłoby, gdyby Drupal 7 działał poniżej wersji 5.4, czy różne moduły, które się do tego przyczyniły, mogą zacząć niszczyć witrynę?

W każdym razie, jeśli użyję pamięci podręcznej kodu APC, może 5.4, czy w ogóle nie przyniesie to żadnych korzyści?

Dzięki

Jan
źródło

Odpowiedzi:

28

Sam zacząłem uruchamiać Drupala 7 na PHP 5.4 z niewielkimi problemami w postaci powiadomień i ostrzeżeń.

Oprócz wersji 7.12 potrzebne będą te dwie łatki, aby rozwiązać problemy powodujące narzekanie na PHP:

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

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

Jedna z tych łat została już zastosowana do -dev, więc będzie w wersji 7.13, a druga prawdopodobnie wkrótce. We wszystkich przypadkach, o których mogę od razu pomyśleć, złą praktyką powodującą ostrzeżenia 5.4 było złe użycie klawiszy tablicy.

Pierwsza wersja tego wygląda następująco:

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

Czasami wywołanie funkcji zwróci tablicę lub obiekt, z których żaden nie jest prawidłowym kluczem tablicy. W PHP 5.3 to, co faktycznie się dzieje i po cichu wygląda następująco:

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

PHP 5.4 ostrzega jednak, że może nie być to, czego chcesz. Druga wersja jest dokładnie taka sama, ale na odwrót.

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

co daje komunikat o błędzie podobny do

Nielegalne przesunięcie ciągu „a_valid_key”

za każdym razem, gdy w $may_be_a_stringrzeczywistości jest łańcuchem, a nie tablicą, ponieważ jedynymi poprawnymi indeksami ciągów są liczby całkowite.

Ponieważ problemy są łatwe do zrozumienia, a poprawka jest (głównie) łatwa do zastosowania, zauważyłem, że w kilku przypadkach wersje -dev są już zaktualizowane lub łatki opublikowane w kolejce, które prawdopodobnie szybko się pojawią z powodu ich prosta natura.

Po kilku testach nie wydaje mi się, aby 5.4 było „niebezpieczne” do uruchomienia w produkcji, i zacząłem już wyświetlać na nim moje małe i osobiste strony. Zachęcam innych do zrobienia tego samego, abyśmy mogli uniknąć historycznie powolnego wdrażania nowych wersji PHP.

W chwili pisania tego tekstu najnowsza wersja APC, 3.1.9, nie działa z wersją 5.4. Z powodzeniem zbudowałem go i używałem z git.

Użycie APC prawdopodobnie zmniejszy wydajność aktualizacji wersji PHP, ale jej nie usunie.

Letharion
źródło
+1 Zastanawiam się nad tym. Czy zauważyłeś jakieś wzrosty wydajności w Drupal, ogólnie z 5,3 do 5,4? Jeśli nie miałbyś nic przeciwko opublikowaniu jeszcze trochę swoich doświadczeń, chętnie przyznam nagrodę za odpowiedź :)
Clive
W kilku słowach posiadanie APC może nie jest warte kłopotu, chyba że może nastąpić znaczny wzrost prędkości, co wydaje się nie mieć miejsca.
Jan
@Clive, muszę jeszcze dokonać pomiarów wydajności, chociaż zamierzam to zrobić (już od dłuższego czasu). Czy zastanawiasz się nad czymś szczególnym? :)
Letharion
W pewnym sensie, tak :) Rozmyślałam nad pomysłem uaktualnienia do wersji 5.4, ale ponieważ właściwie wszystko, co robię, wydaje się być Drupalem, muszę się upewnić, że nie utrudni to mojego życia. Nie przeszkadza mi załatanie kilku modułów na witrynę, ale obawiam się, że wkrótce będzie trudna w utrzymaniu, a nasze serwery produkcyjne są nadal w wersji 5.3, więc nie jestem pewien, czy to spowodowałoby jakiekolwiek problemy. Wszelkie komentarze na ten temat lub trochę informacji na temat „złych praktyk”, które generalnie powodują ostrzeżenia (aby upewnić się, że moje moduły są w porządku), byłyby ogromną pomocą :)
Clive
Zaktualizowałem odpowiedź, co mogłem. :) Mam zainstalowany 5.3, więc mogę łatwo wrócić i wykonać testy wydajności. Mam nadzieję, że będę pamiętać, aby tu wrócić, kiedy do tego dojdę.
Letharion
2

Powinieneś unikać PHP 5.4, ponieważ nie ma dla niego stabilnego APC. Wydajność dla PHP 5.3 + APC byłaby większa niż 5,4.

Vamur
źródło
Obecnie dostępna jest wersja beta. stackoverflow.com/questions/9611676/…
Letharion