Как установить переменную сеанса PHP через командную строку linux? - PullRequest
4 голосов
/ 02 января 2011

Как установить переменную сеанса PHP через командную строку linux?

Уточнение

Итак, как вы знаете, мы можем установить переменные сеанса в PHP, используя $ _SESSION globalпеременная при кодировании.Я хотел бы знать, если есть способ установить эту переменную через командную строку php?

Например, в коде, если я могу установить $ _SESSION ['temp'] = "what"

Есть ли способ установить ту же переменную через командную строку PHP?

Ответы [ 4 ]

6 голосов
/ 02 января 2011

Обработчик сеанса PHP по умолчанию хранит данные сеанса в формате serialize() в файле, что означает, что в основном это обычный текст. Конечно, вы можете манипулировать этим файлом из командной строки, используя любой из стандартных инструментов Unix для работы с текстом (perl, sed, awk, даже echo / cat в сценарии оболочки и т. Д.), Если только вы не представите синтаксическая ошибка в сериализованных данных.

Но в этот момент, если вы не найдете функцию / библиотеку / модуль, который выполняет unserialize() и, скорее всего, также serialize(), вы можете просто использовать сам PHP для выполнения манипуляции. Это будет довольно редкая система, в которой не установлена ​​CLI-версия PHP наряду с версией веб-сервера.

$dat = file_get_contents('/path/to/session/file');
$session = unserialize($dat);
$session['temp'] = 'whatever';
$dat = serialize($session);
file_put_contents('/path/to/session/file', $dat);
2 голосов
/ 26 июля 2011

Я обработал код отладки, который использует переменные $ _SESSION, установив соответствующие переменные в отдельный файл (т. Е. session_vars.php), а затем выполнил следующее:

cat session_vars.php main.php | php

Это добавит PHP к session_vars.php до main.php без внесения каких-либо изменений в main.php, что позволит вам сохранить ваш код в чистоте.

1 голос
/ 22 августа 2012

На самом деле есть способ сделать это в CLI.

Для первого запроса вам нужно позвонить session_id(), чтобы получить первый идентификатор и сохранить его где-нибудь, например, в папке / tmp с уникальным именем (или сохранить его в базе данных или в memcache и т. Д.), Для остальных запросов, прежде чем вызывать session_start() в скрипте, прочитайте идентификатор сессии из файла и передайте его php.

Проверьте этот пример кода ниже:

if($session_id = @file_get_contents('/tmp/SESSION_ID_xxx.txt')) {
  session_id($session_id);
}
else {
  file_put_contents('/tmp/SESSION_ID_xxx.txt', session_id());
}

session_start();

$_SESSION['var1'] = 'foo'; // this variable will retain the value for all following calls of this script
1 голос
/ 02 января 2011

«Сеанс» здесь относится к концепции, используемой для обхода факта, что HTTP не сохраняет состояния между запросами. Сеансы PHP работают, помещая все данные из $_SESSION в какое-то хранилище на сервере (по умолчанию это файлы, но часто меняются на базы данных, memcache и т. Д.), А затем выдают «сессионный cookie», который содержит магический уникальный значение, которое браузер может повторно представить, предлагая PHP прочитать все эти данные обратно.

Ключевым моментом здесь является то, что он, как правило, управляется с помощью этого файла cookie и, по крайней мере, с помощью идентификатора сеанса. При выполнении PHP-скрипта из командной строки у вас, по сути, нет сессии. Таким образом, возникает вопрос, чьим сеансом вы пытаетесь манипулировать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...