Вчера наткнулся на рекламу хостинга Fozzy с SEO-тарифами без ограничния на количество доменов на аккаунте. Кроме того, обещалось, что благодаря технологии виртуализации, не будет проблем с недоступностью сайта из-за высокой нагрузки. Иными словами обещались все преимущества VDS в сочетании с простотой обычного виртуального хостинга. Решил попробовать, тем более выяснилось, что фрилансерам, занимающимся предоставлением услуг, связанных с разработкой сайтов, место под один сайт предоставляется бесплатно. И вот что из этого получилось.
- Перово, Москва, Россия
- me@4xpro.ru
- x4_pro
- XXXXPro
Новости сайта в Telegram
t.me/4x_proКомпьютерное
jsImageBox -- легкий аналог lightbox без jQuery
Делал сегодня фотогалерею для одного из своих сайтов, и потребовался скрипт, который показывал бы фотографию во всплывающей рамке с затемнением фона (так называемый lightbox), причем так, чтобы можно было просматривать сразу целую серию фотографий, переходя от одной к другой. Оригинальный lightbox не подходил именно по причине отсутствия поддержки серий, а его вторая версия использует jQuery. Для того сайта мне покзалось это слишком тяжелым решением, и я стал искать легкий скрипт, не требующий больших библиотек. И такое решение было найдено: jsImageBox, в сжатом виде занимающий всего 9 Kb.
Сканирование черно-белых рисунков
Иногда сталкиваюсь с необходимостью сканировать различные черно-белые рисунки, графики, диаграммы под Linux. При этом если сканировать в greyscale, изображения часто получаются некачественными: либо просвечивает обратная сторона листа, либо фон получается серым и грязным и неприятно выделяется при вставке рисунка в документ. Если же сделать изображение двухцветным, то линии становятся зазубренными.
Недавно нашел способ, как с этим бороться: после сканирования в greyscale нужно сильно повысить контрастность изображения, либо в программе sane, либо после сканирования в каком-нибудь графическом редакторе, а так же выставить небольшую гамма-коррекцию. В частности, я использовал такие параметры: в sane гамма 1.30, затем открывал изображение в GIMP и выставлял там контрастность на +30—+50. В результате получалось качественное изображение с чисто белым фоном и гладкими линиями.
"Умное" сжатие GZIP
Как известно, в PHP есть возможность сжимать с помощью GZIP отдаваемые пользователю данные. С одной стороны, оно позволяет сэкономить траффик и увеличить скорость загрузки, что крайне важно для пользователей, подключенных через GPRS или обычные аналоговые модемы, так как сайты сейчас становятся по объему все больше и больше. С другой — увеличивает нагрузку на сервер: на сжатие требуется дополнительное процессорное время. Кроме того, для пользователей с быстрыми каналами связи эффект от сжатия оказывается настолько незначительным, что время на упаковку/распаковку данных может оказаться вполне сопоставимым со временем, сэкономленным на передаче.
Сразу возникает мысль: а что если как-то определить, как подключен пользователь, и включать сжатие только в тех случаях, если соединение медленное. Читать далее…
Сессии в PHP и нагрузка на сервер
На первый взгляд кажется, что работать с сессиями в PHP предельно просто. Достаточно написать где-нибудь в начале скрипта такой код:
session_name('MySessId'); // задаем имя cookie или параметра, в котором хранится идентификатор сессии
session_set_cookies_params(24*3600,'/','xpro.su'); //если нужно, задаем домен, путь и время хранения для cookie сессии
session_start(); // а теперь запускаем саму сессию
и в глобальной переменной $_SESSION можно будет хранить нужные значения, которые будут доступны при каждом обращении пользователя к странице! На малых сайтах такое решение работает без проблем, но оно не будет масштабируемым: как только сайт достигнет нескольких десятков тысяч страниц или посещаемости в десятки тысяч пользователей в сутки, может случиться так, что сайт будет открываться весьма и весьма медленно.
Отладка PHP-скриптов
Как известно, при возникновении ошибки PHP в лучшем случае выдает номер строки, где она произошла, и ее краткое описание, а в худшем (если в настройках хостинга отключен показ ошибок вообще) — просто пустую страницу. Это не слишком удобно как для отладки, так и для конечного пользователя. Возникает вопрос: как сделать вывод сообщения об ошибке более информативным.
Оказывается, все достаточно просто. В PHP существует специальная функция set_error_handler(), которая позволяет задать свой собственный обработчик ошибок.Единственный ее параметр — это имя функции-обработчика, которая вызывается в случае возникновения ошибки. Функция-обработчик имеет 4 параметра: номер ошибки, текст ошибки, имя файла, в котором ошибка произошла и номер строки в этом файле.
Читать далее…
Правильная выдача заголовка Content-Length
Однажды, скачивая один из своих сайтов с помощью WGet, с удивлением обнаружил, что после каждой страницы программа останавливается и ждет несколько секунд. Да пользователи иногда тоже жаловались на то, что загрузка сайта очень долго не заканчивается. Стал разбираться, в чем дело, и вот что удалось выяснить.
Читать далее…Безопасная загрузка файлов на сервер
Когда на сайте требуется разрешить пользователю загружать свои файлы (например, фото или аватары) с последующим их хранением на сервере, сразу возникает ряд проблем с безопасностью.
Первая и самая очевидная — это имена файлов. Их обязательно нужно проверять на спецсимволы, так как пользователь может подделать HTTP-запрос, в результате чего загружаемый файл будет иметь имя, например, ../index.php. и при попытке его сохранения затрет корневой индекс. Кроме того, название может содержать русские буквы в кодировке windows-1251 или koi-8, которые некорректно сохранятся в файловой системе. Вывод: нужно сохранять файл не под тем именем, под которым его загрузил пользователь, а под случайным, например MD5-хешем от имени файла, времени загрузки и IP пользователя. Имя же этого файла где-нибудь в базе, а потом отдавать файл скритом, который предварительно будет выдавать заголовок Content-disposition: attachment; filename="имя_файла".
Впечатления от Mozilla Firefox 6
Сегодня, запустив Firefox, с удивлением узнал, что уже вышла шестая версия. Скачал обновление, запустил, и… понравилось настолько, что сейчас даже подумываю о том, чтобы снова начать использовать Firefox как основной броузер. (Примечание: до этого у меня стояла версия 3.5.x, поэтому не исключаю, что часть описанных ниже изменений появилась в более ранних версиях.)
Понравилось вот что: Читать далее…
Как определить, запущен ли PHP из командной строки
Иногда при написании скриптов, предназначенных для выполнения длительных операций, возникает необходимость определить, каким именно способом запущен PHP-интерпретатор: из командной строки или же из Web-сервера. Помочь в этом может функция php_sapi_name(), которая возвращает строку, описывающую SAPI (подсистему сервера), которая использовалась.