Есть ли способ в PHP использовать постоянные данные, как в Java EE? (обмен объектами между потоками PHP) без сеанса и кэша / DB

Есть ли способ в 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'] который вы можете прочитать на каждой странице в том же домене.

Подумайте о том, чтобы обратиться к его руководству .