Сессии или константы для хранения данных, что лучше в этой ситуации - PullRequest
1 голос
/ 22 декабря 2009

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

У меня есть веб-сайт, на который могут заходить несколько пользователей для просмотра и хранения информации. Я использую php, Mysql, Apache для операционной системы FreeBSD (хотя в процессе разработки она сейчас на моем домашнем компьютере с Vista). Я храню некоторую информацию об учетной записи в $ _SESSION, но в основном использую классы с локальными переменными для хранения нужных мне данных. У меня будет от 2000 до 6000 пользователей веб-приложения, поэтому я беспокоюсь о производительности. Я хочу сделать это доступным на нескольких языках. На некоторых сайтах, которые я видел, есть выпадающий список, в котором пользователь может выбрать язык, который мне нравится.

У меня есть два варианта, о которых я думал, но понятия не имею, какой из них лучше, или есть ли лучший способ сделать это. Можно было бы хранить данные для конкретного языка в объекте $ _SESSION. Таким образом, пользователь будет входить в систему, и в зависимости от языковых предпочтений $ _SESSION будет заполняться текстом соответствующего языка в переменных, используемых в веб-приложении. Это может означать, что у меня будет около 300 или около того переменных со строковыми данными (без объектов) ... таких как $ _SESSION ['My_Title'] = "Это название моего сайта, на английском или немецком языке и т. Д.". Другим вариантом будет использование CONSTANTS и определение каждого CONSTANT в текстовом файле конфигурации и загрузка этого файла при входе в систему на основе набора языковых предпочтений. Я где-то читал, что использование CONSTANTS несколько медленнее, чем $ _SESSION, но Session будет занимать больше оперативной памяти.

Какие-нибудь идеи или ресурсы, на которые вы могли бы указать мне? Спасибо.

Ответы [ 2 ]

1 голос
/ 22 декабря 2009

Данные, которые вы вводите в $_SESSION, относятся к каждому пользователю - это означает, что если вы поместите одни и те же данные в $_SESSION для 10 пользователей, то эти данные будут дублироваться 10 раз.

Я бы не стал помещать локализованную строку вашего приложения в $_SESSION, personnaly: это нечто «постоянное», то же самое для каждого пользователя - так что оно не имеет своего места в пространстве, специфичном для каждого пользователь.


Использование констант PHP может быть идеей; например:

ru.php :

define('LANG_TITLE', 'The title of the site');
define('LANG_WElCOME', 'Welcome on my site');

И fr.php :

define('LANG_TITLE', 'Le titre du site');
define('LANG_WELCOME', 'Bienvenue sur mon site');


Использование массива PHP было бы другим; например, у вас будет en.php :

$lang = array(
    'title' => "The title of the site", 
    'welcome' => "Welcome on my site", 
);

и fr.php :

$lang = array(
    'title' => "Le titre du site", 
    'welcome' => "Bienvenue sur mon site", 
);


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


Или другой идеей было бы использовать что-то вроде gettext ( см. Также ), который является стандартным способом выполнения переводов, и (конечно) можно использовать из PHP .

Если бы мне пришлось выбирать, я мог бы пойти на решение, основанное на gettext, поскольку оно довольно стандартное - или я бы использовал классы Zend_Translate из Zend Framework, по крайней мере, для ZF основанный на проекте (кстати, среди них есть один адаптер, использующий gettext ;-))

0 голосов
/ 22 декабря 2009

Старайтесь хранить как можно меньше данных за сеанс. По умолчанию данные сеанса хранятся в вашей файловой системе с помощью PHP, и доступ к файловой системе почти всегда медленный.

Я использую сеанс для хранения идентификатора пользователя. Кроме того, я дважды думаю о том, чтобы что-то добавить в сессию.

Возможными альтернативами для хранения данных, которые должны быть постоянными между запросами, являются цепочки данных памяти или ваша база данных (возможно, в таблице, которая хранится только в памяти).

...