Миграция с PHP 5 на PHP 7. Есть-ли автоматизированный фиксер основных багов?

Paulmann

Создатель
Регистрация
12 Мар 2015
Сообщения
4
Реакции
0
Добрый день!

Поделитесь опытом пакетного изменения кода на PHP5 под работу на PHP7.
 
Добрый день!

Поделитесь опытом пакетного изменения кода на PHP5 под работу на PHP7.
Да там ничего особенного, да и в инете полно инфы по этому вопросу.
Я для себя решил, что переносить надо всё, когда перенёс 1 проект и обнаружил прирост производительности ~100% и такой же выигрыш памяти.
При переходе были неочевидные грабли с массивами, где используются ссылки — PHP7 по другому их обрабатывает.
Так что лучше проверить узкие места, где в функциях и особенно в массивах используются ссылки на аргументы.
В коде такие места можно искать по " &$".
У меня в проекте такое встречается более 300 раз, проблема была замечена в 4 или 5 случаях, уже не помню.
Из глобального — пришлось отказаться от mysql драйвера, но это давно нужно было сделать.
Переписывание на mysqli заняло не более дня, тестирование и отладка — пару дней.
Могут быть ещё проблемы, если Вы использовали в проекте дополнительные библиотеки, например PEAR.
У меня этого не было, поэтому не столкнулся.
Больше было бы проблем, если пришлось деградировать с 5.6 на 5.3
Так что бояться перехода не стоит.
 
Последнее редактирование:
Из глобального — пришлось отказаться от mysql драйвера, но это давно нужно было сделать.
Согласен, что давно надо было отказаться, но тем не менее, для тех, у кого овер9к проектов на WordPress - ставим пакет php7-mysql и продолжаем использовать архаику
 
Я думал в сторону чекеров кода с возможностью автофикса:
gisostallenberg/php-to-7-aid
Firehed/php7ize
Alexia/php7mar
sstalle/php7cc

Но толком под PHP7.1/CentOS7 никто из них не заработал
 
Я думал в сторону чекеров кода с возможностью автофикса:
gisostallenberg/php-to-7-aid
Firehed/php7ize
Alexia/php7mar
sstalle/php7cc

Но толком под PHP7.1/CentOS7 никто из них не заработал
Только ручками, никакой «волшебной кнопки». Можно просто втупую попробовать запустить проект под 7-й, выкрутив извещения и варнинги на максимум. И потом править их.
Нет никакого смысла править код, если окажется, что он и так прекрасно работает.
Да, ещё посмотрел в свои записи и обнаружил, что иногда бывают проблемы с переменными, передающимися по ссылке. Искать можно по " $$" в случае переменной и по "->$" в случае передачи метода по ссылке.
Но эти места не всегда проблемные, а только могут быть проблемы тогда, когда делаешь foreach, а в переменной/методе отдается массив. Связано, если помнится, с тем, что в 7 версии foreach работает с копией массива при переборе, поэтому если при переборе вы будете менять сам массив перебора, то будут ошибки. В общем, довольно редкие случаи.
 
Последнее редактирование:
а нельзя было заменить допустим mysql_ на mysqli_ оно ж вроде совместимое?
 
а нельзя было заменить допустим mysql_ на mysqli_ оно ж вроде совместимое?
Это не самая большая проблема. Основная проблема - в PHP7 количество передаваемых функции параметров должно совпадать с тем, что обрабатывает функция, иначе получаем "ArgumentCountError Too few arguments to function fix".

Break для выхода из циклов нужно заменить на Return - основной баг в аспро крутошоп.
И еще кучу мелочей пришлось отлавливать через error.log

sstalle/php7cc удалось установить - он много багов отловил, но он не фиксит автоматом, пришлось ручками править.
 
Последнее редактирование модератором:
Основная проблема - в PHP7 количество передаваемых функции параметров должно совпадать с тем, что обрабатывает функция, иначе получаем "ArgumentCountError Too few arguments to function fix".
Так что-же в этой проблеме основного? И на PHP5, если передать больше параметров, чем принимает функция - получаем нотайсы. Если код изобилует нотайсами, не говоря о других уровнях ошибок, то его сначала неплохо-бы до ума довести, а потом думать, как еще заморочиться.

Break для выхода из циклов нужно заменить на Return - основной баг в аспро крутошоп.
И еще кучу мелочей пришлось отлавливать через error.log
Если скрипт объемный и написан староверами, авторы рефакторить его не хотят, а внутри овер9к сомнительных строк - перевод на новую версию интерпретатора может стать целью, которая не оправдает средства.
 
а нельзя было заменить допустим mysql_ на mysqli_ оно ж вроде совместимое?
Пробовал на собственном проекте не всё автоматом заработало, пришлось ручками остальное править.
 
К сожалению, только руками. Несколько сайтов на WP с кастомным кодом, пришлось вручную допиливать под PHP 7
 
Назад
Сверху