Есть ли способ в PHP использовать переменные «вне сеанса», которые не будут загружаться / выгружаться при каждом подключении, как на сервере Java?
Пожалуйста, извините за отсутствие точности, я не понимаю, как правильно написать это.
Основная идея будет иметь что-то вроде этого:
<?php
...
// $variablesAlreadyLoaded is kind of "static" and shared between all PHP threads
// No need to initialize/load/instantiate it.
$myVar = $variablesAlreadyLoaded['aConstantValueForEveryone'];
...
?>
Я уже делал такие вещи, используя это shmop
и другие странные вещи, но если есть «чистый» способ сделать это в «чистом PHP» без использования систем кэширования (я думаю о APC, Redis …) или базы данных.
РЕДАКТИРОВАТЬ 1:
Поскольку люди (благодаря тому, что они потратили на меня время) одинаково отвечают мне с помощью сессий, я добавляю ограничение, которое я пропустил: нет сессий, пожалуйста.
РЕДАКТИРОВАТЬ 2:
Кажется, единственные нативные методы PHP, делающие это, — это общая память (shmop
) и именованные трубы. Я бы использовал управляемый способ для доступа к общим объектам, не обращая внимания на управление памятью (размер блока совместно используемой памяти) и системные проблемы (каналы).
Затем я просмотрел в сети модуль / библиотеку PHP, которая предоставляет функции / методы для этого: я ничего не нашел.
РЕДАКТИРОВАТЬ 3:
После нескольких исследований пути, указанного @KFO, кажется, что putenv
/ setenv
не созданы для работы с объектами (и я бы избежал сериализации). Таким образом, это решает проблему для коротких «вещей», таких как строки или числа, но не для более крупных / сложных объектов.
Использование «env way» И другого метода для работы с большими объектами было бы несогласованным и усложнило бы код и удобство обслуживания.
РЕДАКТИРОВАТЬ 4:
Нашел это: DBus (GREE Lab DBus), но у меня нет инструментов, чтобы проверить это на работе. Кто-нибудь уже проверял это?
Я открыт для любого предложения.
Спасибо
РЕДАКТИРОВАТЬ 5 («ОТВЕТ»):
Поскольку DBus не совсем то, что я ищу (нужно установить сторонний модуль, без «серьезных» доказательств приложения), я сейчас использую Memcache, который уже доказал свою надежность (после комментария @PeterM, см. Ниже ).
// First page
session_id('same_session_id_for_all');
session_start();
$_SESSION['aConstantValueForEveryone'] = 'My Content';
// Second page
session_id('same_session_id_for_all');
session_start();
echo $_SESSION['aConstantValueForEveryone'];
Это работает из коробки в PHP. Использование одного и того же идентификатора сеанса (вместо случайной уникальной строки пользователя) для инициализации сеанса для всех посетителей приводит к сеансу, который одинаков для всех пользователей.
Действительно ли необходимо использовать сессию для достижения цели или лучше ее не использовать? константы?
Нет чистого способа обмена информацией между разными
темы в PHP! За исключением решения «внешний» файл / база данных / серверная переменная / файл сеанса.
Вы можете объявить переменную в вашем .htaccess. Например SetEnv APPLICATION_ENVIRONMENT production
и получить доступ к нему в вашем приложении с помощью функции getenv('APPLICATION_ENVIRONMENT')
Другое решение — заключить вашу переменную в класс «постоянных данных», который будет автоматически восстанавливать содержимое данных при каждом запуске php-скрипта.
Вашему классу необходимо следующее:
__destructor
__constructor
Я предпочитаю хранить файл в формате JSON, чтобы содержимое можно было легко проверить на предмет отладки, но это необязательно.
Имейте в виду, что некоторые веб-серверы изменят текущий рабочий каталог в деструкторе, поэтому вам нужно работать с абсолютным путем.
Я думаю, что вы можете использовать $_SESSION['aConstantValueForEveryone']
что вы можете прочитать его на каждой странице в одном домене.
Рассмотрим ссылку на это руководство.