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

Тема в разделе "PHP", создана пользователем Paulmann, 11 июн 2017.

Метки:
Модераторы: latteo
  1. Paulmann

    Paulmann Создатель

    Регистр.:
    12 мар 2015
    Сообщения:
    4
    Симпатии:
    0
    Добрый день!

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

    Den1xxx

    Moderator
    Регистр.:
    15 янв 2014
    Сообщения:
    280
    Симпатии:
    155
    Да там ничего особенного, да и в инете полно инфы по этому вопросу.
    Я для себя решил, что переносить надо всё, когда перенёс 1 проект и обнаружил прирост производительности ~100% и такой же выигрыш памяти.
    При переходе были неочевидные грабли с массивами, где используются ссылки — PHP7 по другому их обрабатывает.
    Так что лучше проверить узкие места, где в функциях и особенно в массивах используются ссылки на аргументы.
    В коде такие места можно искать по " &$".
    У меня в проекте такое встречается более 300 раз, проблема была замечена в 4 или 5 случаях, уже не помню.
    Из глобального — пришлось отказаться от mysql драйвера, но это давно нужно было сделать.
    Переписывание на mysqli заняло не более дня, тестирование и отладка — пару дней.
    Могут быть ещё проблемы, если Вы использовали в проекте дополнительные библиотеки, например PEAR.
    У меня этого не было, поэтому не столкнулся.
    Больше было бы проблем, если пришлось деградировать с 5.6 на 5.3
    Так что бояться перехода не стоит.
     
    Последнее редактирование: 11 июн 2017
    Paulmann, funnywheel и Sarkerdo нравится это.
  3. funnywheel

    funnywheel WordPress developer

    Регистр.:
    6 авг 2010
    Сообщения:
    256
    Симпатии:
    209
    Согласен, что давно надо было отказаться, но тем не менее, для тех, у кого овер9к проектов на WordPress - ставим пакет php7-mysql и продолжаем использовать архаику
     
  4. Paulmann

    Paulmann Создатель

    Регистр.:
    12 мар 2015
    Сообщения:
    4
    Симпатии:
    0
    Я думал в сторону чекеров кода с возможностью автофикса:
    gisostallenberg/php-to-7-aid
    Firehed/php7ize
    Alexia/php7mar
    sstalle/php7cc

    Но толком под PHP7.1/CentOS7 никто из них не заработал
     
  5. Den1xxx

    Den1xxx

    Moderator
    Регистр.:
    15 янв 2014
    Сообщения:
    280
    Симпатии:
    155
    Только ручками, никакой «волшебной кнопки». Можно просто втупую попробовать запустить проект под 7-й, выкрутив извещения и варнинги на максимум. И потом править их.
    Нет никакого смысла править код, если окажется, что он и так прекрасно работает.
    Да, ещё посмотрел в свои записи и обнаружил, что иногда бывают проблемы с переменными, передающимися по ссылке. Искать можно по " $$" в случае переменной и по "->$" в случае передачи метода по ссылке.
    Но эти места не всегда проблемные, а только могут быть проблемы тогда, когда делаешь foreach, а в переменной/методе отдается массив. Связано, если помнится, с тем, что в 7 версии foreach работает с копией массива при переборе, поэтому если при переборе вы будете менять сам массив перебора, то будут ошибки. В общем, довольно редкие случаи.
     
    Последнее редактирование: 11 июн 2017
    Paulmann нравится это.
  6. Minor

    Minor

    Регистр.:
    16 авг 2012
    Сообщения:
    235
    Симпатии:
    88
    а нельзя было заменить допустим mysql_ на mysqli_ оно ж вроде совместимое?
     
  7. Paulmann

    Paulmann Создатель

    Регистр.:
    12 мар 2015
    Сообщения:
    4
    Симпатии:
    0
    Это не самая большая проблема. Основная проблема - в PHP7 количество передаваемых функции параметров должно совпадать с тем, что обрабатывает функция, иначе получаем "ArgumentCountError Too few arguments to function fix".

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

    sstalle/php7cc удалось установить - он много багов отловил, но он не фиксит автоматом, пришлось ручками править.
     
    Последнее редактирование модератором: 11 июн 2017
  8. funnywheel

    funnywheel WordPress developer

    Регистр.:
    6 авг 2010
    Сообщения:
    256
    Симпатии:
    209
    Так что-же в этой проблеме основного? И на PHP5, если передать больше параметров, чем принимает функция - получаем нотайсы. Если код изобилует нотайсами, не говоря о других уровнях ошибок, то его сначала неплохо-бы до ума довести, а потом думать, как еще заморочиться.

    Если скрипт объемный и написан староверами, авторы рефакторить его не хотят, а внутри овер9к сомнительных строк - перевод на новую версию интерпретатора может стать целью, которая не оправдает средства.
     
  9. iFormer

    iFormer Создатель

    Регистр.:
    27 апр 2013
    Сообщения:
    10
    Симпатии:
    3
    Пробовал на собственном проекте не всё автоматом заработало, пришлось ручками остальное править.
     
  10. DjedayD

    DjedayD Создатель

    Регистр.:
    13 янв 2015
    Сообщения:
    10
    Симпатии:
    3
    К сожалению, только руками. Несколько сайтов на WP с кастомным кодом, пришлось вручную допиливать под PHP 7