?

Log in

No account? Create an account

rauf


Блог Алиева Рауфа

О жизни и о себе


Previous Entry Поделиться Флаг Next Entry
О чудесах
rauf
Время от времени каждый из нас может вспомнить ситуации, когда ну вот всё правильно делаешь, а система «чудит». Бьешься, пытаешься найти проблему, уже и консиллиум вокруг себя собрал — никто не может понять, в чем дело, а потом проходит какое время и наступает озарение. И понимаешь, что сглупил, что вот она, ошибка. На поверхности лежала. Потом такие байки можно в профессиональной тусовке рассказывать.


Продолжение на хабре


Маленький оффтопик с программерской тематики на жизненную. Одна такая байка случилась лет семь со мной в Турции. Мне понадобилось зачем-то погладить там футболку и я пытался сформулировать глубокую мысль на английском, ну как мог. На ресепшене его тоже знали не очень, они пытались меня понять.

— Ту а’йрон, ай ниид ту айрон, — говорю я девушке. To iron. To — iron. White t-shirt. To iron. Она машет головой: «Ок, ок, мистер!». Спросила, буду ли я в комнате у себя. Да, отвечаю, где ж мне еще быть-то с утюгом.

Сижу в комнате. Тут стук в дверь, открываю ее и чуть не грохаюсь на пол. На меня смотрит турецкий мужчина и ничего не понимает. В руках держит поднос, на котором два айрана.

Вот такие ситуации иногда происходят и с компами, и в программировании, и в администрировании. Началось все с чужой истории про почту, которая не ходила дальше 500 миль. Я опубликовал ее на ЖЖ еще в 2003 году, так на нее до сих пор посещение заметное. Видимо, трогает тема людей, да.

На домашнем ноуте (macbook) у меня вдруг заклинило мышь. Двигаешь курсор мыши, а он с собой окошки утаскивает. Перегружаю комп (это уже не просто сделать было без мыши), секунд пять работает как надо, а потом опять такая же фигня. Вот ни с того, ни с сего же. Работала ведь минуту назад! Ничего не ставил и не записывал на диск, не изменял. Просто на пустом месте рраз! — и не работает. И ведь даже сделать ничего нельзя, мышь не работает, с клавиатуры толку мало на макоси. За пять секунд в начале, конечно, ничего не успеваешь. Я сломал всю голову, что бы это могло быть.

И тут я перешел на кухню. Тачпад заработал. Сам собой. Уфф, подумал я, чудеса случаются, но все, проблема в прошлом, и вернулся к разбору почты.

Вечером я вернулся обратно в комнату с ноутом. Ну ёлки палки, опять. Кое-где проступил мат.

Пришла мысль вернуться на кухню. Я ее отогнал, потому что это бред. Но она не отступала. Вернулся. Ура курсорчек задвигался!!! Вернулся в комнату — опять заблокирован.

Я уже подумал о дозиметре, ей богу.

Сел и стал думать. И понял.

Вы будете смеяться. Дети игрушками прижали кнопку блютусной мыши в углу комнаты, о которой я уже вообще забыл — как-то тачпадом было удобнее. До кухни блютус уже не добивал.
Так вот, всё это есть вступление к теме сегодняшней заметки. Тема будет про сайт. Вот не поверите, я вспомнил и о мыши, о об айране, когда вчера вечером пытался понять, what the fuck.

Я сейчас делаю прототип сайта, такой быстрый наколеночный прототип сайта и онлайн-версии к своей игре Wordrive. Игра сейчас на ревизии в Apple, через недельки две запустится. Прототип призван проверить несколько технологий и эту благородную миссию он уже выполнил. Но иногда надо его чинить, пока он всё еще прототип.

Сайт работает на базе RewriteEngine — это такая технология от Apache, позволяющая, в частности, преобразовывать адреса вида /folder1/folder2/ в что-то типа /script.php?param=/folder1/folder2. У меня было настроено так, что не преобразовывает она только в одном случае — если ресурс, на который указывает путь, действительно существует. Это позволяет обращаться к картинкам, например, /img/picture.png и этот путь не будет «скормлен» скрипту script.php. Потому что там стоит специальная строчечка.
Давайте я все-таки полное содержание .htaccess:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /script.php?param=$1 [L,QSA]


В script.php у меня есть условие, типа следующего,

clearlog();
$param = $_REQUEST[’param’];
if ($param == «/folder1/folder2/») 
{
// BLOCK A : process folder1 — folder2 
writelog (’1′);
} else
{
// BLOCK B : 
writelog (’2′);
}


И тут я вижу, что при ОДНОМ обращении в браузер, в лог пишется ДВЕ строки. Двоечка и единичка.

Я протер глаза. Попробовал еще раз. Стер лог-файл. Вписал в браузер в режиме «инкогнито» вызов, открыл инструментарий разработчика, проверил, что запрос один. ТО ЖЕ САМОЕ. В логе две строки. 2 и 1. Жаль, нет доступа к access-логам, посмотрел бы еще там. Но его нет.

Хорошо, подумал я, это проблема хостинга. Там, наверное, неправильно обрабатывают запросы. У них уровнем выше есть .htaccess уровня сервера и там тоже есть правила. Наверное, обрабатываются два раза. И написал им заявку.

Вместе с хостингом мы убедились, что:

если стереть .htaccess или убрать оттуда RewriteEngine, — все работает,
если воспользоваться Firefox — все работает,
один хром у хостера тоже не выдал проблемы.

Ребята из хостинга возились три часа. В итоге прислали письмо:

Здравствуйте, Рауф.

Проблема, связанная с повторным исполнением скрипта, вызвана исключительно самим
браузером «Chrome» и не как не связанна с файлом ~/public_html/.htaccess.

Мы проверили Ваш скрипт на другой площадке, где в каталоге выше нет .htaccess.
Тоже самое возникает и там. Причем повторная строка возникает, если
открывать страницу через «Chrome». Например, если открыть страницу через
«FireFox», то подобной проблемы нет.


Это письмо я получил дома, в шесть утра. Пока ехал на работу, я понял, в чем проблема. Но стоило еще все проверить.

Как я и ожидал, дело оказалось в favicon.ico. Браузер посылает запрос на этот файл параллельно с запросом на скрипт. Google Chrome это делает с каждым запросом. Firefox, наверное, однажды получив вместо иконки кусок моего HTML из скрипта, понял, что что-то не так и больше не обращался. А Chrome настойчив — он дергает этот файл. Это и по логам оказалось так. А файла favicon.ico, конечно, на сайте не было. И тут срабатывало правило — надо его перенаправлять на скрипт, /script.php?param=favicon.ico Внутри логика шла по другому пути, и запись в лог срабатывала, а все отладочные echo выводились только для второго запроса.

Кстати, для прототипа сервиса my.wordrive.com меня порадовала задача написания функции перевода из десятичной в 62-ричную систему и обратно. Ведь появляются же такие задачи!.. И ведь без нее никак.

Вот за это я люблю программирование.


  • 1
(Deleted comment)
Да, я почти сразу заметил опечатку, но исправил почему-то только на хабре. Спасибо, за нее стыдно, что-то меня отвлекло :)

И ещё плохо НЕ давать ссылки на посты, на которые ты ссылаешься в тексте (http://rauf.livejournal.com/23552.html)

И тебе спасибо. Все истории очень познавательные, кроме про сайт, т.к. в программировании я так до сих пор нихрена не понимаю))

  • 1