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

Есть ли способ в 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, см. Ниже ).

7

Решение

// 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! За исключением решения «внешний» файл / база данных / серверная переменная / файл сеанса.

4

Другие решения

Вы можете объявить переменную в вашем .htaccess. Например SetEnv APPLICATION_ENVIRONMENT production и получить доступ к нему в вашем приложении с помощью функции getenv('APPLICATION_ENVIRONMENT')

2

Другое решение — заключить вашу переменную в класс «постоянных данных», который будет автоматически восстанавливать содержимое данных при каждом запуске php-скрипта.
Вашему классу необходимо следующее:

  • сохранить содержимое переменной в файл в __destructor
  • загрузить содержимое переменной из файла в __constructor

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

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

2

Я думаю, что вы можете использовать $_SESSION['aConstantValueForEveryone'] что вы можете прочитать его на каждой странице в одном домене.

Рассмотрим ссылку на это руководство.

1
По вопросам рекламы [email protected]