Есть ли способ в 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:
Поскольку люди (спасибо им, потратив время на меня), отвечают мне одинаково с сеансами, я добавляю ограничение, которое я пропустил, чтобы написать: никаких сеансов, пожалуйста.
EDIT 2:
Кажется, что единственными встроенными методами PHP для этого являются разделяемая память ( shmop
) и именованные каналы. Я бы использовал управляемый способ доступа к общим объектам без учета управления памятью (размер разделяемой памяти) и системных проблем (труб).
Затем я просмотрел сеть для модуля / библиотеки PHP, который предоставляет функции / методы для этого: я ничего не нашел.
ИЗМЕНИТЬ 3:
После нескольких исследований по пути, указанным @KFO, кажется, что putenv
/ setenv
не предназначены для работы с объектами (и я бы избегал сериализации). Таким образом, он решает проблему для коротких «вещей», таких как строки или числа, но не для более крупных / комплиментных объектов.
Использование «env way» И еще один метод для работы с более крупными объектами будет несвязным и добавить сложность в код и поддержку.
EDIT 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. Использование одного и того же идентификатора сеанса (вместо случайной строки user-uniqe) для инициализации сеанса для всех посетителей приводит к сеансу, который одинаковый для всех пользователей.
Действительно ли необходимо использовать сеанс для достижения цели или не лучше ли использовать константы ?
Существует нет чистого способа PHP обмена информацией по различным потокам в PHP! За исключением «внешнего» файла / базы данных / серверного / сеансового файла.
Вы можете объявить переменную в своем .htaccess. Для примера SetEnv APPLICATION_ENVIRONMENT production
и получите доступ к нему в своем приложении с помощью функции getenv('APPLICATION_ENVIRONMENT')
Другим решением является перенос вашей переменной в класс «постоянных данных», который будет автоматически восстанавливать содержимое своих данных каждый раз при запуске скрипта php. Вашему классу необходимо следующее:
__destructor
__constructor
Я предпочитаю хранить файл в формате JSON, чтобы контент можно было легко изучить для отладки, но это необязательно.
Имейте в виду, что некоторые веб-серверы изменят текущий рабочий каталог в деструкторе, поэтому вам нужно работать с абсолютным путем.
Я думаю, вы можете использовать $_SESSION['aConstantValueForEveryone']
который вы можете прочитать на каждой странице в том же домене.
Подумайте о том, чтобы обратиться к его руководству .