Портрет 4X_Pro
Онлайн
Мультиблог
4X_Pro
Записки лишнего человека

Компьютерное

jsImageBox -- легкий аналог lightbox без jQuery

4X_Pro

Делал сегодня фотогалерею для одного из своих сайтов, и потребовался скрипт, который показывал бы фотографию во всплывающей рамке с затемнением фона (так называемый lightbox), причем так, чтобы можно было просматривать сразу целую серию фотографий, переходя от одной к другой. Оригинальный lightbox не подходил именно по причине отсутствия поддержки серий, а его вторая версия использует jQuery. Для того сайта мне покзалось это слишком тяжелым решением, и я стал искать легкий скрипт, не требующий больших библиотек. И такое решение было найдено: jsImageBox, в сжатом виде занимающий всего 9 Kb.

Читать далее…

Сканирование черно-белых рисунков

4X_Pro

Иногда сталкиваюсь с необходимостью сканировать различные черно-белые рисунки, графики, диаграммы под Linux. При этом если сканировать в greyscale, изображения часто получаются некачественными: либо просвечивает обратная сторона листа, либо фон получается серым и грязным и неприятно выделяется при вставке рисунка в документ. Если же сделать изображение двухцветным, то линии становятся зазубренными.

Недавно нашел способ, как с этим бороться: после сканирования в greyscale нужно сильно повысить контрастность изображения, либо в программе sane, либо после сканирования в каком-нибудь графическом редакторе, а так же выставить небольшую гамма-коррекцию. В частности, я использовал такие параметры: в sane гамма 1.30, затем открывал изображение в GIMP и выставлял там контрастность на +30—+50. В результате получалось качественное изображение с чисто белым фоном и гладкими линиями.

"Умное" сжатие GZIP

4X_Pro

Как известно, в PHP есть возможность сжимать с помощью GZIP отдаваемые пользователю данные. С одной стороны, оно позволяет сэкономить траффик и увеличить скорость загрузки, что крайне важно для пользователей, подключенных через GPRS или обычные аналоговые модемы, так как сайты сейчас становятся по объему все больше и больше.  С другой — увеличивает нагрузку на сервер: на сжатие требуется дополнительное процессорное время. Кроме того, для пользователей с быстрыми каналами связи эффект от сжатия оказывается настолько незначительным, что время на упаковку/распаковку данных может оказаться вполне сопоставимым со временем, сэкономленным на передаче.

Сразу возникает мысль: а что если как-то определить, как подключен пользователь, и включать сжатие только в тех случаях, если соединение медленное. Читать далее…

Сессии в PHP и нагрузка на сервер

4X_Pro

На первый взгляд кажется, что работать с сессиями в PHP предельно  просто. Достаточно написать где-нибудь в начале скрипта такой код:

session_name('MySessId'); // задаем имя cookie или параметра, в котором хранится идентификатор сессии
session_set_cookies_params(24*3600,'/','xpro.su'); //если нужно, задаем домен, путь и время хранения для cookie сессии
session_start(); // а теперь запускаем саму сессию

и в глобальной переменной $_SESSION можно будет хранить нужные  значения, которые будут доступны при каждом обращении пользователя к  странице! На малых сайтах такое решение работает без проблем, но оно не  будет масштабируемым: как только сайт достигнет нескольких десятков  тысяч страниц или посещаемости в десятки тысяч пользователей в сутки,  может случиться так, что сайт будет открываться весьма и весьма  медленно.

Читать далее…

Отладка PHP-скриптов

4X_Pro

Как известно, при возникновении ошибки PHP в лучшем случае выдает номер строки, где она произошла, и ее краткое описание, а в худшем (если в настройках хостинга отключен показ ошибок вообще) — просто пустую страницу. Это не слишком удобно как для отладки, так и для конечного пользователя. Возникает вопрос: как сделать вывод сообщения об ошибке более информативным.

Оказывается, все достаточно просто. В PHP существует специальная функция set_error_handler(), которая позволяет задать свой собственный обработчик ошибок.Единственный ее параметр — это имя функции-обработчика, которая вызывается в случае возникновения ошибки. Функция-обработчик имеет 4 параметра: номер ошибки, текст ошибки, имя файла, в котором ошибка произошла и номер строки в этом файле.


Читать далее…

Правильная выдача заголовка Content-Length

4X_Pro

Однажды, скачивая один из своих сайтов с помощью WGet, с удивлением обнаружил, что после каждой страницы программа останавливается и ждет несколько секунд. Да пользователи иногда тоже жаловались на то, что загрузка сайта очень долго не заканчивается. Стал разбираться, в чем дело, и вот что удалось выяснить.

Читать далее…

Безопасная загрузка файлов на сервер

4X_Pro

Когда на сайте требуется разрешить пользователю загружать свои файлы (например, фото или аватары) с последующим их хранением на сервере, сразу возникает ряд проблем с безопасностью.

Первая и самая очевидная — это имена файлов. Их обязательно нужно проверять на спецсимволы, так как пользователь может подделать HTTP-запрос, в результате чего загружаемый файл будет иметь имя, например, ../index.php.  и при попытке его сохранения затрет корневой индекс. Кроме того, название может содержать русские буквы в кодировке windows-1251 или koi-8, которые некорректно сохранятся в файловой системе. Вывод: нужно сохранять файл не под тем именем, под которым его загрузил пользователь, а под случайным, например MD5-хешем от имени файла, времени загрузки и IP пользователя. Имя же этого файла где-нибудь в базе, а потом отдавать файл скритом, который предварительно будет выдавать заголовок Content-disposition: attachment; filename="имя_файла".

Читать далее…

Впечатления от Mozilla Firefox 6

4X_Pro

Сегодня, запустив Firefox, с удивлением узнал, что уже вышла шестая версия. Скачал обновление, запустил, и… понравилось настолько, что сейчас даже подумываю о том, чтобы снова начать использовать Firefox как основной броузер. (Примечание: до этого у меня стояла версия 3.5.x, поэтому не исключаю, что часть описанных ниже изменений появилась в более ранних версиях.)

Понравилось вот что: Читать далее…

Как определить, запущен ли PHP из командной строки

4X_Pro

Иногда при написании скриптов, предназначенных для выполнения длительных операций, возникает необходимость определить, каким именно способом запущен PHP-интерпретатор: из командной строки или же из Web-сервера. Помочь в этом может функция php_sapi_name(), которая возвращает строку, описывающую SAPI (подсистему сервера), которая использовалась.

Читать далее…

Немного о юзабилити таблиц

4X_Pro

Часто при разработке CMS требуется вывести таблицу с какими-то элементами, которые можно выбирать и редактировать (например, список страниц сайта или список вопросов в FAQ). Казалось бы, что проще: достаточно использовать всего три тега — table, tr, td и все. Однако если список будет длинный, да еще названия элементов могут быть длинными и растягиваться на несколько строчек, то пользоваться такой таблицей будет не очень удобно. Можно дать несколько советов, как сделать такую таблицу более удобной. Читать далее…


Страницы:
Задать вопрос

Здесь можно задать мне вопрос или спросить совета по любой теме, затронутой в блогах или на форуме. После того, как я отвечу, вопрос и ответ появятся в соответствующем разделе. Но не забываем, что я — сторонник slow life, поэтому каких-либо сроков ответов не обещаю. Самые интересные вопросы станут основой для новых тем на форуме или записей в блоге.
Сразу предупреждаю: глупости, провокации, троллинг и тому подобное летит прямо в /dev/null.