Обо мне

4X_Pro
4X_Pro
Живу в Сети с 25 ноября 2000 г.
Веду блог с 8 января 2011 г.

Контакты

Xpro.Su: заметки о жизни в Интернете

Абсолютный URL на PHP

Web-программирование Оставить отзыв »

К моему большому удивлению, в PHP нет готовой функции для построения абсолютного URL по относительному и базовому. Пришлось писать ее самому. И вот что получилось:

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

Собственный сервис оптимизации загрузки сайтов

Разное, Инструменты веб-мастера, Ускорение сайтов Оставить отзыв »

Рад сообщить, что сегодня запустил собственный сервис для оптимизации времени загрузки сайтов: 2Seconds.Ru. Он позволяет легко и быстро получить список всех CSS и JavaScript страницы (если они прописаны через теги link и script), минифицировать их и склеить в один файл. Кроме того, сервис позволяет автоматически встраивать в CSS графические файлы меньше указанного размера с помощью data:uri.

Удаление файлов старше N дней

Администрирование, Linux 1 отзыв »

Часто требуется удалить только те файлы, которые последний раз изменялись раньше определенного количества дней. Например, старые файлы сессий или временные файлы. В Linux это делается достаточно просто командой

find путь -type f -mtime +дни -print | xargs rm -f

Здесь find находит по указанному пути. все файлы со временем модификации более чем указанное количество дней назад, выводит их список, который передается утилите xargs, которая для каждого полученного аргумента вызывает rf -f. В случае, если команда выполняется через cron, пути нужно прописывать полностью, например:

/usr/bin/find ./ -type f -mtime +2 -print | /usr/bin/xargs /bin/rm -f

Как перейти на формат WebP с минимальными изменениями сайта

Администрирование, Сайтостроительство, Ускорение сайтов Оставить отзыв »

Некоторое время назад появился новый формат для графических изображений — WebP. Этот формат обладает рядом преимуществ по сравнению с JPEG: поддерживает как сжатие с потерями, так и сжатие без потерь, а также прозрачность изображений (альфа-канал), и во многих случаях сжимает изображения эффективнее (на моих сайтах — изображения в WebP получаются 30-35% меньше). Но к сожалению, полностью перейти на этот формат пока не так просто. Во-первых, сейчас его полноценно поддерживают только Web-броузеры, работающие на основе WebKit, а Firefox и IE/Edge — нет. Во-вторых, исправить на уже существующем сайте расширения всех файлов с .jpg на .webp может быть весьма трудоемкой задачей. Но недавно я нашел интересное решение, которое предложил Vincent Orback на Github: использовать подмену JPEG на WebP с помощью mod_rewrite. Для этого добавим в .htaccess такие строки:

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

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

Web-программирование, Сайтостроительство 1 отзыв »

Сегодня получил письмо от хостера, в котором говорилось, что на один из моих сайтов поступила жалоба на спамвертайзинг, и приводился пример спамного письма. Из него выяснилось, что на самом деле спамом рекламируется совершенно другой сайт, а от моего используется только скрипт, который делал редирект со статусом 301 на указанный ему в параметрах адрес.
Таким образом, в современных условиях наличие на сайте скрипта, который позволяет делать редирект без какой-либо проверки, небезопасно. Возникла мысль, как можно его защитить, но при этом не слишком усложнять. Решение нашлось быстро: передаем в скрипт редиректа два параметра, один из которых — это сам URL, второй — хеш, который считается от URL и некоторой строки-ключа. Редирект происходит только тогда, когда рассчитанный на основе URL хеш совпадет с переданным, в остальных случаях выдается ошибка 404. (Естественно, при этом придется поправить все те места на сайте, где генерируется ссылка на скрипт с редиректом, чтобы рассчитать и добавить хеш.) В результате получаем вот такой скрипт:

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

Несколько советов, как делать резервные копии баз данных

Администрирование, Сайтостроительство, Linux 3 отзывов »

На первый взгляд, сделать резервную копию базы данных какого-либо сайта предельно просто, если есть доступ к утилите mysqldump и планировщику заданий cron. Добавляем в планировщик запись вида:

3 14 * * * /usr/bin/mysqldump -u root -pпароль имя_базы > путь/backup.sql

и все, каждый день в 3 часа 14 минут будет сниматься дамп. Время для резервного копирования следует выбирать так, чтобы в этот момент нагрузка на сервер была минимальной за сутки.
Но такое решение недостаточно надежно. Если база повредится, скажем, в 3:12, то дамп будет перезаписан пустым файлом.
Для защиты от этого имеет смысл сохранять перед снятием новой копии сохранять старую, а также делать отдельные копии через определенные промежутки времени. Например, я сохраяю еженедельную и ежемесячную, а чтобы меньше нагружать SQL-сервер, просто копирую файлы дампа:

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

Как отформатировать сумму и дату на JavaScript

Web-программирование, Сайтостроительство Оставить отзыв »

Недавно потребовалось вывести в Интернет-магазине сумму заказа с десятичными разделителями, причем сделать это с помощью JavaScript. Стал искать, есть ли встроенные средства для этого и обнаружил объект NumberFormat. В простейшем случае форматирование выполняется так: var str = new Intl.NumberFormat().format(value), где value — это число, которое нужно отформатировать. По умолчанию используются свойства системной локали, но можно и указать ее явно: new Intl.NumberFormat('ru-RU'), и хеш с опциями в качестве второго параметра. Напримр, new Intl.NumberFormat('ru-RU', { style: 'currency', currency: 'RUB', currencyDisplay: 'symbol'}) явно указывает, что нужно использовать форматирование, применяемое для денежных сумм, использовать валюту рубль и выводить не "руб.", а ₽. О других опциях можно узнать в справочнике.

Поскольку некоторые старые броузеры с этим объектом работать не умеют, рекомендую выполнять проверку с помощью такой функции:

function formatPrice(value) {
  if (Intl.NumberFormat) return new Intl.NumberFormat('ru-RU',{ style: 'currency', currency: 'RUB', currencyDisplay: 'symbol'}).format(value); 
  else return value; // если броузер не поддерживает этот объект, оставляем все как есть, без обработки
}

Для форматирования даты используйте объект Intl.DateTimeFormat c аналогичным методом format.

Виртуальный шпионаж или Как узнать о человеке все

Разное 1 отзыв »

Любой человек, ведущий более-менее активную жизнь в Сети так или иначе оставляет в ней свои следы. И вооружившись терпением и умением правильно пользоваться поисковыми системами, можно собрать о нем немало любопытной информации. Основной подход здесь такой: нужно тщательно проверять каждую новую зацепку, которую удается найти. Скажем, выполняя поиск по Email, находим профиль на форуме, и делаем поиск по логину и всем контактам профиля. Также следует помнить, что Интернет в целом является ненадежным хранилищем информации, поэтому рекомендуется на каждого человека заводить файл, в который сохранять всю найденную информацию в виде скриншота, ссылки и предполагаемой оценки достоверности. Вот несколько рекомендаций для различных исходных данных.

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

Adminer — легкая альтернатива phpMyAdmin

Инструменты веб-мастера Оставить отзыв »

Иногда бывает нужно выполнить на сайте несколько SQL-запросов, а ни SSH-доступ, ни PHPMyAdmin на хостинге по тем или иным причинам недоступны. Коненчо, можно загрузить и установить phpMyAdmin самостоятельно, но из-за его большого объема на загрузку и установку уходит достаточно много времени. В результате я стал искать какой-нибудь альтернативный скрипт, который состоял бы всего из одного файла и не требовал бы настройки, а только ввода логина/пароля. В итоге остановился на решении под названием Adminer. Это небольшой скрипт (около 200 Кб, если использовать английскую версию), который умеет показывать список и структуру таблиц, данные из них, выполнять SQL-запросы, делать экспорт и импорт данных. В общем, все необходимое для того чтобы быстро изучить и подправить базу данных сайта.

Редактор баз данных для Linux

Полезный софт, Linux Оставить отзыв »

Долгое время для работы с базами данных MySQL (создания таблиц, редактирования данных, импорта, экспорта и т.п.) использовал замечательную программу HeidiSQL. Но увы, она существует только под Windows. Поэтому когда в очередной раз перебрался под Linux, встал вопрос о ее замене. Рассмотрев несолько вариантов, остановился на DBeaver (который поддерживает не только MySQL, но и множество других баз данных, например, PostgreSQL и SQLite) и является открытым ПО. В Ubuntu он устанавливается командой sudo apt-get install dbeaver-ce. Пока из недостатков выявил только один: интерфейс хуже в плане юзабилити. В частности, чтобы добраться до списка БД или списка таблиц в базе, нужно совершить больше щелчков мышью, так как индексы. В остальном программа вполне меня устраивает.