@LionG

Я разучился понимать работу кода?

function check() {
    $some_var = get_option('my_some_var');

    if ($some_var == 'magic') {
        error_log('result:true some_var:'.$some_var);
        return true;
    } 

    error_log('result:false some_var:'.$some_var);
    return false;
}

check();


error.log
result:true some_var:magic
result:true some_var:magic
result:true some_var:magic
result:true some_var:magic
result:true some_var:magic
result:false some_var:magic
result:true some_var:magic
result:true some_var:magic


result:false some_var:magic

UPD: суть вопроса в разных ответах. Кодировка some_var не меняется. Просто открываю страницу 10 раз и попадается result:false хотя some_var==magic
  • Вопрос задан
  • 299 просмотров
Решения вопроса 6
dollar
@dollar
Делай добро и бросай его в воду.
Самый простой способ отловить этот баг - это добавить в error_log:
  1. Длину $some_var (скорее всего, этого будет достаточно)
  2. Код каждого символа. (Здесь и раскроется парадокс). Должно быть: 109 97 103 105 99

Гипотетический вариант решения
$some_var = trim($some_var);
Ответ написан
Вангую пробельный символ в magic. Скорее всего \n, но возможно и табуляция и пробел.
Т.е. 1 ответа dollar
Ответ написан
Комментировать
402d
@402d
начинал с бейсика на УКНЦ в 1988
Моя заявка на конкурс телепатов. В движке свой механизм cron задач, который делает консольный вызов скрипта. Конфиг php.INI в этом случае берётся из другого места
Ответ написан
Комментировать
VladimirAndreev
@VladimirAndreev
php web dev
Запишите в логи md5($some_var)
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Очень смешное предложение про md5 и длину.
Направление в принципе верное, но вот что делать с полученным результатом - вот тут мысль наших добестных похапешников останавливается.

А теперь внимание - правильный ответ
urlencode() - самая удобная отладчная функция. Читаемые символыв она оставит как есть, а непечатные - закодирует в удобный формат.
Ответ написан
@LionG Автор вопроса
magic это статическая строка хранимая в БД
get_option - по сути лезет в БД и получает значение по ключу my_some_var

Проблема была как то связанна с mysql ошибкой out of sync. Как только ее пофиксил такого больше не повторялось. Не понятно только откуда тогда magic брался если БД вернула ошибку, хотя get_option не так прост и там кеширование какое то есть, скорее всего реально либо с кодировкой что то либо лишние символы добавлялись когда значение из кеша бралось когда БД возвращала ошибку.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы