FreeBSD - решение проблем с удалением PHP-сессий

На сервере, выполняющей фуцнкции небольшого вебхостинга, переполнился каталог /tmp по inodes. Оказалось, в /tmp порядка 270 000 файлов PHP-сессий. Попробуем разобраться, почему старые сессии не удаляются.

Сессии создаются интерпретатором PHP, логично предположить, что PHP должен удалять неактуальные сессии. В PHP это выполняет «garbage collector», логику работы которого можно изменить, поправив три переменные в php.ini:

; вероятность запуска сборщика мусора при запуске PHP-функции session_start()
; расчитывается по формуле session.gc_probability / session.gc_divisor
; Здесь вероятность = 1/100, по умолчанию, session.gc_probability = 1, т.е. 1/1000
session.gc_probability = 10
session.gc_divisor     = 1000

; время жизни сессии в секундах = 24 минуты
session.gc_maxlifetime = 1440

Удалим сессий старше 24 минут

find /tmp/ -name "sess_*" -type f -cmin +24 -print0 |xargs -r -0 rm -vf

При создании раздела при помощи newfs обратите внимание на параметр -i. По умолчанию, рассчитывается по формуле (размер раздела в байтах) / (4*2048). Например на разделе, весом 2Г, максимальное количество файлов = (2×1024×1024*1024) / (4×2048) = 262144

Ссылки

FreeBSD - PHP показывает время на час назад

Обнаружил, что PHP некорректно выводит результат функции date(). Пакет с данными о часовых поясах актуален. В php.ini:

date.timezone = 'Asia/Novosibirsk'

Но для корректной работы функции date() этого оказалось недостаточно.

Решение

cd /usr/ports/misc/pecl-timezonedb/ && make install clean
service apache22 restart

Проверка

Создадим date.php

<?php
        echo date("F j, Y, g:i a");
?>

Выполним

$ php date.php 
December 22, 2011, 10:53 am

Обновление pecl-timezonedb

При обновлении пакета может возникнуть ошибка:

Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

*** Error code 1

Stop in /usr/ports/misc/pecl-timezonedb.

Для решения проблемы выполнить:

csh
ls -la /usr/local/bin | grep autoconf
setenv PHP_AUTOCONF autoconf-2.69
setenv PHP_AUTOHEADER autoheader-2.69

Ссылки

Plesk 9 - сборка модуля sqlite для PHP

Преамбула

В ОС CentOS/RHEL в дистрибутивной сборке PHP отсутствует библиотека sqlite (доступна только slqite3). Библиотека необходима для корректной работы сайтов, сделанных в SiteBuilder. Ниже описание сборки, установки, настройки библиотеки sqlite.

Установка вспомогательных инструментариев

yum install svn autoconf automake gcc make php-devel
rpm -Uvh http://64.131.90.31/PSA_10.2.0/thirdparty-rpm-RedHat-el6-x86_64/php-devel-5.3.2-6.el6.1.x86_64.rpm

Установка sqlite

svn checkout http://svn.php.net/repository/php/php-src/branches/PHP_5_3 ~/php-src-5.3

Установка, настройка xcache

xcache предназначен для оптимизации интерпретатора PHP.

Установка remi (нужен для php 5.3.x)

 # rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

Установка xcache

 cd /opt
 wget http://xcache.lighttpd.net/pub/Releases/1.3.0/xcache-1.3.0.tar.gz
 tar -xvzf xcache-1.3.0.tar.gz
 cd xcache-1.3.0/
 yum install php-devel gcc
 phpize

FreeBSD - установка, настройка Apache, PHP, MySQL

Apache

Добавляем строки в ''/etc/make.conf''

 # ----------------- Apache ---------------------------------
 .if ${.CURDIR} == /usr/ports/www/apache22
 WITHOUT_CACHE=yes
 WITHOUT_DAV=yes
 WITHOUT_EXPERIMENTAL=yes
 WITHOUT_LDAP=yes
 WITHOUT_MISC=yes
 WITHOUT_PROXY=yes
 WITHOUT_SSL=yes
 WITHOUT_THREADS=yes
 WITH_SUEXEC=yes
 SUEXEC_DOCROOT=/home/www
 .endif
 # ----------------------------------------------------------

Запускаем сборку

 # cd /usr/ports/www/apache22
 # make config

 
blog.txt · Последние изменения: 2013/01/23 14:51 — Антон Бугреев · []