Pull to refresh
50
0
Антон Сердюк @m00t

Software Engineer

Send message
Обычно делают как: есть какой-то код, который отвечает за сабмит формы. Чтобы отвязать этот код от суперглобальных переменных (например, для юниттестов), обычно в него передают массивы $_POST и $_FILES. Вот на этом этапе и можно преобразовать $_FILES в более удобную и логичную структуру, но только локально в коде, отвечающем за сабмит формы. В частности, именно так было сделано в Symfiny 1.x. А если вы преобразуете прямо суперглобальный массив, потом могут возникнуть проблемы. Например: вы подключите к своему приложению в одном месте сторонний код, который будет надеяться увидеть в $_FILES именно такую структуру, какая там по умолчанию — и на вашем приложении он работать уже не будет.
//зануда_mode=ON: PHP6 не существует и в ближайшее время не будет. Есть PHP 5.3 и разрабатывается PHP 5.4 (уже вроде как в beta)
Я еще не проверил, повторяется ли эта ошибка в версии 7.22. Написал в рассыку, там говорят, тоже похожую проблему наблюдали, но в транке она уже якобы решена. Вот ссылка, если интересно: curl.haxx.se/mail/lib-2011-10/0061.html
Тут еще другая штука — мне было необходимо узнать, это у меня проблема или нет. Узнал, что в libcurl — теперь это не мое дело (разве что ради интереса поколупать в свободное время), потому что мы не можем физически собирать для каждого проекта-граббера патченный libcurl. Проще и дешевле написать демона, который после нескольких минут отсутствия записей в логах будет просто прибивать зациклившийся процесс.
За наводку на race condition спасибо, если будет время поковыряю посмотрю. Я как-то об этом и не подумал, хотя вроде же в PHP все в одном потоке идет.
В syslog не смотрел, но согласен с davinchi: ничего там не должно оказаться по идее.
Кстати именно с этой страницы развилась моя идея «а давайте влезем в работающий скрипт из gdb»
Спасибо за пояснения. Не очень силен я в этом.
Насколько я понимаю, желательно все-таки -O0, -g3 не очень-то и нужно (по крайней мере я в манах когда про -g читал, понял это будто какая-то дополнительная инфа)

По поводу сборки PHP не совсем понял. Тот, который ставился из пакетов не имел дебажной инфы в себе, а тот который я просто скомпилил с --disable-debug почему-то имел при компиляции ключи помойму -g -O2, если я не ошибаюсь. Т.е. вроде как и оптимизация на полную, и вроде как и дебаг-инфа включается. Впрочем, я не стал загоняться сильно — мне хватило такого. Если вы поясните точнее почему это так как есть, буду благодарен.
для этого и компилил локально php с ключом -g, чтобы использовать его только для ловли бага на одном только скрипте. Все остальные кроны, веб-интерфейс, а так же остальные сайты на этом сервере, по-прежнему работают на основном, не пересобранном php, посталенном стандартным способом.
Если честно, я до конца не разобрался, что именно кроме .h-файлов и утилит типа phpize ставится пакетом php5-dev и чем отличаются пакеты php5-dev в ubuntu от этого php5-dbg на debian (или может быть это два разных пакета, имеющиеся на обоих системах). Но. Если он не меняет бинарник php, то отдебажить его не получится — нужно, чтобы бинарник был собран с ключом -g (в него должна быть включена информация для дебаггера), и наличие хедеров никак тут не поможет.
Не совсем хотелось ставить глобально дебаг-версию PHP на полубоевом сервере
Пока что не ставил такую задачу перед собой. Не думаю, что там чего интересного будет, хотя разобраться и понять, как это работает — не помешало бы, наверное. Для общего развития.
Спасибо, буду иметь ввиду.
Проблему изначальную не решил, потому что она не в PHP-скрипте моем была — зацикливается внутри libcurl. Каким-то образом linked list, хранящий в себе все хендлеры загрузок, превращается в кольцо, поэтому обход этого списка через while(curr) {blabla; curr = curr->next;} никогда не заканчивается. Отписался им в рассылку по этому поводу (вот, жду модерации). Без gdb я бы этого никогда не узнал )
Кстати вот не надо про «слушать музыку». В музыкальной школе обычно самые-самые ученики, чтобы еще лучше отточить исполнение произведения слушают его же в исполнении «гуру». Везде (и в программировании) есть порог, дальше которого самому уже расти сложновато. Дальше для роста нужны внешние источники «вдохновения» — чужие исходники, такие вот скринкасты, хорошие учителя и т.п.
        $k = abs(3 - ($sl / $gl));
        $k += $c - $gl - $sl;
        if ($k < $mk)
        {
            $enc = $item;
            $mk = $k;
        }
Интересное решение, спасибо. Пугает немного только непонятный алгоритм
Да я примерно сказал. Чего вы занудничаете) Кто ж его знает, во что скомпилится в конечном счете регулярка '#.#u'
Насколько я знаю, те символы, что из 1 байта никак не отличаются от обычной ASCII.
Судя по всему проверяются начальный байт в каждой паре байтов. И если нашли хоть один UTF8-символ — возвращаем TRUE. Ну это как мне кажется.

Information

Rating
Does not participate
Date of birth
Registered
Activity