За последние 24 часа нас посетили 16660 программистов и 1626 роботов. Сейчас ищут 1019 программистов ...

Переход с Php 5.2.x на 5.5.x

Тема в разделе "Установка PHP", создана пользователем rs_ssh, 5 май 2014.

  1. rs_ssh

    rs_ssh Активный пользователь

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    В новой версии php начали выскакивать предупреждение:
    Notice: Undefined variable: color_p in C:\capcha.php on line...
    Кусок кода капчи:
    Код (Text):
    1. function rev(&$im,$x,$y)//функция реверсии цвета
    2. {
    3. global $color_w,$color_g;
    4. $w=$h=rand(15,30);
    5. for($i=$x-$w/2;$i < $x+$w/2;$i++)
    6.   for($k=$y-$h/2;$k < $y+$h/2;$k++,$color_p=imagecolorat($im,$i,$k))
    7.     if($color_p>$color_w)
    8.        imagesetpixel($im,$i,$k,$color_w);
    9.     else
    10.        imagesetpixel($im,$i,$k,$color_g);
    11. }
    Чтобы как то подправить это, изменил эту строку if($color_p>$color_w) на эту if(isset($color_p) && $color_p>$color_w)

    Корректно ли такое изменение? Или может как то по-другому лучше подправлять. Таких условий где надо дополнять isset($var) && ... очень много.

    Например так, где было это if($var == 1), надо менять на это if(isset($var) && $var == 1). Эта переменная может быть а может не быть. Если её нету то новая php версия выводит предупреждение. В старой такого не было.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    версия тут не при чем
     
  3. rs_ssh

    rs_ssh Активный пользователь

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    Затестил с php 5.3.x, всё ок.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    просто либо перепиши на иссеты, либо отруби вывод нотисов.
     
  5. rs_ssh

    rs_ssh Активный пользователь

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    Либо потратить время на новый движок :)
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну типа переменные в любом случае надо сначала инициализировать.
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Нужна переменная? Возьми за привычку перед ее использованием, где-то в начале функции/метода/простыни, объявить ее с пустым значением. Или поставь себе тот же phpStorm - он сразу показывает места, где происходят попытки чтения из переменной, существование которой подвластно лишь теории вероятности.

    При этом, если перед использованием переменной поставить isset на нее, не важно где и как, главное, чтобы он был частью конструкции, открывающей блок кода, Шторм перестанет ругаться, мол, все ок - проверка стоит, поведение кода вышло из состояния неопределенности.

    Конечно, есть третий путь - if (@(a==1)) { }.

    Но код, имхо, должен быть такой, чтобы вообще не ругался при E_ALL и не опирался на @. Такие вещи как болезнь, их надо лечить по принципу "нашел причину - устранил", а не "не вижу, значит не было".