Arm1.ru

Заметка про сессии в PHP и Garbage Collector

Неприятную штуку тут на одном из рабочих серваков обнаружил.

Исторически сложилось, что при старте PHP-движка сайта выставляется значение:

session_save_path( PATH_TMP );
ini_set( 'session.gc_maxlifetime', 1800 );

То бишь у нас кастомная директория для хранения сессий, и время жизни ей выставлено в полчаса для garbage collector.

На сервере используется php-fpm. Обнаружил проблемы в логах - будто бы место закончилось на диске. Хотя его ещё дофига. Сразу мысль - где-то дофига файлов мелких насоздавалось. Как оказалось - не стирались файлы сессий в нашей кастомной директории. Стал копаться - на php.net нахожу параметр session.gc_probability, который в php.ini должен быть выставлен в 1 - это вероятность того, что при выполнении скрипта запустится ещё и garbage collector.

В подсказках пользователя запись, что Debian выставляет этот параметр в 0. Гугление говорит, что это связано с выставленными на дефолтную папку /var/lib/php5 правами, которые не позволяют php-шному garbage collection очищать старые файлы оттуда. То есть он отрубает garbage collector у php и вроде как от рута запускает какое-то своё cron-задание для очистки. Ищет он файлы, похоже, в стандартной директории, а т.к. оно не совпадает с нашей директорией PATH_TMP - то сессии не удалялись.

Вот такие пироги. Выход - либо настроить своё cron-задание для очистки, например:

0,30 * * * * find /path/to/tmp -mmin +30 -exec rm {} \;

Либо в php.ini прописывать дефолтную папку. Но, например, если на сайте 2 проекта, которые используют разные временные папки для хранения сессий, то тут уже придётся для обоих как-то что-то настраивать.

Либо при старте скрипта добавить строчку: ini_set('session.gc_probability', 1);

Лично мне больше нравится своё cron-задание. Хотя может и добавление ещё одной строчки в скрипт - лучше, т.к. на будущее может избавить от этой проблемы. Хотя cron как-то кажется надёжнее. Осталось придумать теперь, как мне удалить накопившиеся за 6 месяцев файлы. Midnight Commander часа 2 у меня сканировал папку. Когда счётчик перевалил за 49 миллионов - я забил на сканирование, поставил удаление и пошёл спать.

Такие дела.

comment comments

funky-play 1.2

funky-play

Обновил расширение для Safari. Теперь выводится 5 релизов на панели вместо 3. Ну и дизайн теперь в стиле Safari 8.

Исходники на GitHub.

Установить расширение.

comment comments

TELE2 запустил 3G в Питере

TELE2 запустил 3G в Питере

Ура, наконец-то это свершилось. Сегодня TELE2 запустили 3G в Питере. Будут всем постепенно включать в течение 3 недель, но если не терпится - можно позвонить по номеру 611 и попросить оператора включить сейчас. Оставлю этот скрин тут, чтобы через пару месяцев замерять скорость снова и сравнить - улучшилось ли или ухудшилось :) Говорят, летом 2015 года хотят запустить LTE. Наконец-то прогресс добрался и до TELE2.

comment comments
local_offer tele2 3g

Как обновить хакинтош с OS X Mavericks до Yosemite

Как обновить хакинтош с OS X Mavericks до Yosemite

Недавно наконец сделал обновление с OS X 10.9 до 10.10 своего рабочего хакинтоша. Потратил много времени. Опишу, как это сделал и с какими проблемами столкнулся.

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

comment comments

Заметка про HTTPS и приложения для ВК

Однажды почуяв, что сайт может открываться по https, браузеры (по крайней мере, Firefox и Chrome) уже не хотят открывать его по https. Например, ВКонтакте. А раз сайт открывается через https, то некоторые ресурсы страницы могут всё ещё подгружаться по http, но только не Javascript-скрипты. Они блокируются и должны загружаться только по https.

Сегодня делал простенькое iframe-приложение для ВК. По сути у меня слегка оформленнся php-страница, в которую я просто ставил php-код системы бронирования и покупки билетов. Вставив в приложении в ВК адрес, обнаружил, что ВК у меня работает через HTTPS и страница моя тоже пытается по нему же загрузиться. А т.к. сервер мой https не поддерживает, пришлось настраивать.

Сертификат я получил через StartSSL бесплатно. Настроил всё, всё заработало (теперь мой бложек можно открывать и так: https://arm1.ru отключил, оставил только http пока, т.к. все комменты от Disqus и лайки соцсетей слетели :) да и нет нужды мне в https на этом домене), аллилуйя, скрипт стал грузиться. Только вот PHP-код системы билетов возвращает по сути свой HTML, в котором подгружается по http разный js-код. А так как он блокируется, ничего опять не работает :) Адская, конечно, связка получается. ВК -> iframe -> мой сервер -> сервер билетов. Теперь жду, пока они у себя на сервере https настроят и по нему будут весь js-код отдавать.

Но пара полезных уроков извлечена.

  1. По возможности внешний js-код подгружать не "http://site.com/code.js", а "//site.com/code.js". // - говорит о том, чтобы использовать текущий протокол соединения. Проверка возлагается на плечи браузера и не нужно самому в коде проверять протокол.
  2. Экспириенс по поднятию и настройке https на своём сервере. 2 инструкции, чтобы не потерялись:
    1. Получаем бесплатный SSL сертификат (через StartSSL).
    2. Настраиваем HTTPS-сервер на nginx.

Теперь главное не забыть, что через год SSL сертификат надо будет продлить.

comment comments

Расширение для Safari для Funkysouls.com

Расширение для Safari для Funkysouls.com

Я периодически захожу на Funkysouls в поисках новой музыки. Пролистываю несколько первых страниц, смотрю по тэгам - может ли мне это быть интересно, после чего копирую название исполнителя, иду в ВК или на Яндекс.Музыку, вставляю и слушаю там пару трэков. Если мне нравится - тогда только пробую заиметь альбом.

Надоело мне копипастить и я написал расширение для Safari (давно хотел освоить).

Расширение делает всего 2 вещи:

  1. Когда заходишь на Funkysouls - у каждого релиза добавляется 2 кнопки Play, как видно на скрине. Красная ведёт на поиск по исполнителю на Яндекс.Музыку, синяя ведёт на поиск по исполнителю в ВК. Не надо больше копипастить. 2 клика - и ты слушаешь.
  2. Разошёлся слегка, пока писал, и добавил панельку в браузер. Расширение дёргает раз в 5 минут RSS сайта и выводит на панельке 3 последних релиза. Можно отслеживать их не заходя на сайт, например. Естественно, если нажать на название релиза на панельке, откроется новая вкладка с его страницей на фанках.

При желании, можно взять код расширения из end.js и button.css, вставить его в Chrome в расширение Control Freak, например, и получить те же 2 кнопки Play в Chrome. В Firefox, думаю, тоже, через Greasemonkey.

Исходники на GitHub.

Установить расширение.

comment comments