Рефакторинг старого кода php

94
20 апреля 2022, 10:40

Возникла необходимость рефакторинга довольно старого кода на php, написанного примерно в 2005м году. Код запускается на php 5.3 но обрабатывается явно не корректным способом.

В многих местах кода встречается символ амперсанда (&) для математических операций, которые вызывают сомнения. Я знаю, что это $a & $b = чисто из бит которые установлены в $a и в $b, но данное поведение явно ошибочное, так как код работает не корректно.

setcookie('neme', 'value', time() & 604800);

где по логите time() & 604800 должно быть как time() + 604800

$a= imagecreatetruecolor( 133 & 1, 59 & 1 );

Подобный мест довольно много в коде. Подскажите, как правильно изменить код для его корректной работы?

Answer 1

Разберем поведение побитового И для 5.3 и 7.4 версий.

  1. time() & 604800

Код для теста:

$t = time();
echo $t . PHP_EOL;
echo $t & 604800;

Результат в php 5.3: 1604695647 78336

Результат в php 7.4: 1604695691 78464

Вывод: Логка поведения & не изменилась

  1. 133 & 1, 59 & 1

Код для теста:

echo (133 & 1) . PHP_EOL;
echo 59 & 1;

Результат в php 5.3: 1 1

Результат в php 7.4: 1 1

Как видим результат идентичен.

Разберемся теперь с функциями, может они как раз вели себя по разному в разных версиях

Рассмотрим setcookie

Код для теста

setcookie('neme', 'value', time() & 604800);
print_r($_COOKIE);

Результат в php 5.3: array()

Результат в php 7.4: array()

Ситуацая с imagecreatetruecolor аналогичная.

ВЫВОД Данный код, работает идентично для этих двух версий php, из этого вытекает, что он в принципе не может работать на одной версии, а на другой нет. Скорее всего вы очень плохо разобрались в данном коде. Советую вам удостовериться что именно этот код используеться для установки куки, может это просто мертвый код а вы над ним голову ломаете.

P.s Побитовое И работает одинаково для всех языках программирования.

READ ALSO
Записать полученный ответ в формате JSON в MySQL

Записать полученный ответ в формате JSON в MySQL

Всем приветЕсть сайт на Wordpres

73
Как изучить yii2?

Как изучить yii2?

друзьяПол года назад решил зайти в веб, начал учить html/css и php

83
Получить текст из изображения PHP

Получить текст из изображения PHP

Подскажите пожалуйста, нужно реализовать извлечение текста из картинок(png, jpg)Как на сервисе https://img2txt

99
Как скрыть папку с аватрами(изображения) от прямого доступа?

Как скрыть папку с аватрами(изображения) от прямого доступа?

Изображения сохраняются в директорию images/Можно ли как то запретить прямой доступ по url, но дать возможность выводить с помощью тега img? Я думал...

94