Чтение и запись глобальных переменных в скриптах на PHP - PullRequest
4 голосов
/ 17 сентября 2009

Есть ли в PHP глобальные переменные, которые могут быть изменены одним запущенным скриптом и прочитаны другим?

Ответы [ 9 ]

12 голосов
/ 17 сентября 2009

Нет, по своей конструкции PHP представляет собой архитектуру «ничего не делиться», что означает, что ничто не распределяется между процессами, выполняющимися одновременно, или между запросами, выполняющимися один за другим. Есть способы обмена данными, но вы должны сделать это явно.

Если вы просто хотите поделиться двумя запросами от одного и того же пользователя, возможно, вам подойдут сеансы или файлы cookie.

Если вы хотите делиться между несколькими пользователями, вам, вероятно, понадобится какой-то тип общего постоянного хранения, либо кратковременный в кэше (например, memcached), либо более надежный, например, база данных.

В любом случае, данные фактически извлекаются и восстанавливаются при каждом запросе. Это просто обрабатывается для вас автоматически в случае сессий.

5 голосов
/ 02 мая 2015

Вы можете использовать $ _ SESSION , т. Е .:

script1.php

<?php
session_start();
$_SESSION['myVar'] = "something";
?>

script2.php

<?php
session_start();
echo $_SESSION['myVar'];
//something
?>
2 голосов
/ 17 сентября 2009

Вы можете сделать это, используя разделяемую память или APC (которая использует саму разделяемую память).

1 голос
/ 17 сентября 2009

Каждый запрос обрабатывается собственным экземпляром php. Глобальные переменные в php доступны только из одного экземпляра php. Однако вы можете использовать что-то вроде memchached модуля для обмена данными между различными экземплярами (что обычно должно быть быстрее, чем запись данных в файловую систему).

1 голос
/ 17 сентября 2009

Единственный доступный между скриптами - это суперглобальный массив $ _SESSION. Это потому, что все, что вы храните в массиве, отправляется в cookie-файл, который затем может быть получен следующим PHP-скриптом.

Глобальные переменные просто означают, что к ним можно получить доступ в скрипте независимо от области видимости; это не значит, что их можно отправлять между скриптами.

Так что либо вы должны передать переменные с помощью массива $ _SESSION (он сохраняет куки на клиентском компьютере, поэтому не отправляйте конфиденциальную информацию через этот массив), либо вы можете либо POST, либо GET между скриптами для отправки переменные.

0 голосов
/ 30 декабря 2018

Я создал крошечную библиотеку (~ 2 КБ; <100 строк), которая позволяет вам сделать это: <a href="https://github.com/rahuldottech/varDx" rel="nofollow noreferrer"> varDx

Имеет функции для записи, чтения, изменения, проверки и удаления данных. Он реализует сериализацию и поэтому поддерживает все типы данных.

Вот как вы можете его использовать:

<?php
require 'varDx.php';
$dx = new \varDx\cDX; //create an object
$dx->def('file.dat'); //define data file

$val1 = "this is a string";
$dx->write('data1', $val1); //writes key to file
echo $dx->read('data1'); //returns key value from file
0 голосов
/ 17 сентября 2009

Глобальные переменные плохи в большинстве программ. Они особенно плохи в многопоточных / многопользовательских системах, таких как веб-приложения. Избегайте. Если вам необходимо использовать глобальные переменные (а не глобальные константы), поместите их в базу данных с транзакциями, защищающими обновления.

Поскольку вы говорите о разных сценариях, то, похоже, вам действительно нужна среда веб-приложений на языке, более ориентированном на приложения - что-то вроде Django (python) или Rails (ruby). Они позволяют вам думать о вашем коде гораздо больше как о сплоченной ПРОГРАММЕ, а не как о множестве свободно связанных скриптов, которые обрабатывают веб-запросы.

0 голосов
/ 17 сентября 2009

Другой распространенной заменой глобальных переменных в PHP является совместное использование базы данных, такой как MySQL (хотя и не идеальной)

0 голосов
/ 17 сентября 2009

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

...