Main Contents

PHPSESSID, и как с ним бороться.

February 13, 2008 by Scratch

Язык PHP имеет встроенные функции для работы с сессией. Но даже банальная работа с сессией имеет свои подводные камни. Возьмем, к примеру, PHPSESSID. Эта переменная используется для того, чтобы указать, какой id сессии нужно использовать. Да, многие разработчики отключают использование этого параметра вообще (то есть, используется только cookie), но если этот параметр включен…
(more…)

Filed under: Tips and tricks | Comments (4)

Xdebug — для тех, кому не хватает vardump-а.

January 23, 2008 by Scratch

var_dump() — эта функция знакома большинству программистов, пишущих на php, которые переросли стадию HelloWorld. Любой более-менее сложный проект требует отладки и проверки работы — для чего используются функции наподобие var_dump, print_r, var_export… Некоторые программисты даже наловчились использовать echo, хотя на это бывает страшно смотреть.
Но, как обычно бывает, встроенных средств отладки (а также самописных библиотек) начинает не хватать. Те разработчики, которые перешли на PHP с языков вроде C, страдают от нехватки удобных и мощных средств отладки. Я, например, долго писал на BorlandC++, и отсутствие профайлера и дебаггера в PHP меня дико расстраивало.
Для того, чтобы восполнить этот пробел, придумали программу (а точнее, подключаемое дополнение) XDebug.

(more…)

Filed under: Tips and tricks | Comments (3)

Этот коварный disabled

January 8, 2008 by Scratch

Есть в html такая штука — checkbox. Штука очень удобная, полезная и вообще — почти ни один сайт не обходится без чекбоксов.
Но есть у чекбоксов дурная черта, да и не только у них… Но об этом по порядку.
Достаточно часто при создании страниц нужно сделать некоторый текст нередактируемым. Все замечательно, берем элемент, добавляем ему атрибут readonly, и все работает (точнее, все кроме редактирования).
А теперь пробуем проделать ту же штуку с чекбоксом — и видим, что его значение можно изменить, причем успешно.
Первое, что приходит на ум — это выставить ему значение disabled. Тогда он показывается, он даже может быть отмечен (checked), но — значение от него не отдается серверу при отправке формы. Нормальное поведение для нормального элемента, но — дело в том, что если чекбокс не отмечен, то его значение тоже не отправляется. То есть, в общем виде, имея только результат запроса от браузера, невозможно определить — значение checkbox не пришло потому что он не был выбран, или потому что он был запрещен…

(more…)

Filed under: Tips and tricks | Comments (0)

Маленькие причуды массивов

January 4, 2008 by Scratch

Иногда самые простые вещи могут поставить в тупик. Например, такая банальная штука как удаление элемента из массива. Собственно, с одним таким багом я столкнулся сегодня, и хотел бы его описать.

Итак, представим ситуацию.  У нас есть JS код, в котором объявлен массив. Например, вида

var arr = [1,2,3,4,5,6,7];

Теперь перед нами стоит задача — удалить все четные элементы. Причем — удалить из исходного массива, а не получить новый

Для этого обычно пишется такая функция:

function cleanEven(arr) { 
    // проходим по всем элементам 
    for (var i = 0; i < arr.length; i++) { 
        // Если элемент  делится нацело на два 
        if ( ! (arr[i] % 2)) { 
            // Заменяем часть массива 
            // с позиции i, длиной 1 на пустоту 
            // (то есть удаляем i-тый элемент массива) 
            arr.splice(i, 1); 
        } 
    } 
}

После запуска и выполнения все вроде бы работает. В моем тестовом запуске все сработало нормально.

Но — попробуем этот же код на массиве



var arr = [1,2,3,4,4,3,2,1];

После выполнения функции над этим массивом мы обнаружим, что внутри массива осталась четверка.

В чем проблема?

(more…)

Filed under: Tips and tricks | Comments (0)

Про баги (история с моралью)

December 23, 2007 by Scratch

Буквально предыдущий пост имел внутри себя интересный баг, а именно:

он содержит в себе две ссылки. Первая из них показывалась нормально (подозреваю, что только на больших мониторах), а вторая — выползала фик знает куда. Причем делала она это только в FF, насколько мне известно.

Отсюда мораль — даже если вы пишете простую запись в блог, не поленитесь просмотреть, как она выглядит в распространенных браузерах.

Filed under: Tips and tricks | Comments (5)

Немного об отладке AJAX / PHP / JSON

December 6, 2007 by Scratch

Классическая схема — программист использует AJAX для того, чтобы передавать какие-то данные серверу. Все хорошо до тех пор, пока система не начинает постоянно выдавать ошибки о невалидном коде (JSON - это всегда валидный JS-код).

Нужно посмотреть, что же происходит. Большинство программистов в этом случае ставят себе что-то наподобие FireBug или других таких же штук.

И — в один прекрасный момент понимают, что хорошо бы еще и какую-нибудь отладочную информацию отсылать вместе с валидным JSON-кодом.  Все бы хорошо, но как в структуру вида {a:1} поместить отладочную информацию?

Ответ неожиданно прост — любые PHP-шные print_r или var_dump нужно просто обрамить обычным комментарием вида /* */.

То есть, код

/* Some useful info */ {a:1}

будет считаться вполне нормальным с точки зрения JS, и может использоваться для отладочной информации.

Filed under: Tips and tricks | Comments (1)