Воскресенье, 3 февраля


На днях один мой приятель, который сейчас учится на Java-программиста, скинул мне по электронной почте самописный скрипт блога на PHP. Он меня, собственно, и вдохновил на написание этой заметки с обзором некоторых часто встречающихся ошибок программистов.

1. Чистые URL'ы
Достаточно модное сейчас дело. Согласитесь, «blog.example/moya-statya» гораздо лучше описывает содержимое открываемой страницы, чем, допустим, «blog.example/index.php?post=56744». При разработке этой системы, что правда, можно столкнуться с подводными камнями, и если не обратить на них внимания в свое время, то это может в будущем создать дополнительные проблемы при работе со скриптом. Обязательно следует предусмотреть ситуацию, при которой в базе статей окажется две записи под названием «Моя статья». Мне лично достаточно часто попадаются такие просчеты, причем даже на коммерческих сайтах. В таком случае, по адресу «blog.example/moya-statya» должно открыться что? У некоторых открывается самая старая статья, у некоторых же самая новая, но это в любом случае неверно, поскольку открываться должны одновременно обе статьи, но не по одному адресу. Из решений для данной проблемы могу предложить следующие варианты:
1. Запретить статьи с одинаковыми заголовками (при попытке создания статьи с уже имеющимся в базе данных заголовком выводить предупреждение пользователю).
2. Добавлять порядковый номер статьи (если «Моя статья» уже есть, то создать «Моя статья-2»; дополнительно будут расходоваться ресурсы на подсчет количества одинаковых статей для того, чтобы избежать зацикливания: «Моя статья-2-2»)
3. Добавлять в конец адреса статьи случайные буквы или цифры (так поступает Invision Power Board начиная с третьей версии и IWE): «moya-statya-2f6dw».

2. Получение данных с внешних ресурсов
Каждый начинающий разработчик рано или поздно захочет научится получать данные не только из базы данных, но и со внешних ресурсов. В нашем случае внешним ресурсом оказался сайт банка, отдающий курс валют в специальном xml-формате. Курс валют обновляется не чаще раза в сутки и не обновляется в выходные и праздничные дни, однако наш же сайт запрашивает данные с сайта банка при каждом обращении к странице. Зачем, ведь данные-то возвращаются одни и те же? Если Ваш сайт посещает несколько человек в сутки, то в этом нет ничего страшного, однако для крупного же портала такой метод работы с данными совершенно недопустим, поскольку наш портал можно будет спокойно обвинить в DDoS-атаке на сервер банка. Решается проблема очень просто ― нам всего-лишь нужно применить для получаемых данных кеширование. Можно либо сохранять получаемый xml-ответ на своем сервере, либо вырезать из него данные и записывать их в базу данных ― выбор за разработчиком, однако обновлять прокешированные данные мы должны не чаще, чем они обновляются в источнике. Можно просто установить лимит на частоту обновления равный одним суткам, а можно сделать еще лучше ― обновлять данные только раз в сутки по будням (так как в выходные банк не работает и данные не обновляются). Можно пойти еще дальше и вести базу данных праздничных дат, в которые также не следует обновлять данные, однако это уже, на мой взгляд, совершенно лишнее, учитывая бесконечные переносы выходных и все такое прочее. Стоит также предусмотреть вариант, когда при обновлении данных произошел сбой и сайт не ответил либо возвратил недопустимый ответ. В таком случае, обновление должно пройти повторно несколько погодя, а не только лишь на следующий день.


03.02.2013, 19:48
  разработка, PHP, частые ошибки.
Просмотров: 3338.
9