Передача переменных PHP между скриптами

Я испытываю трудности с этим, поэтому я Googled, а также читаю здесь, в SO. В конце концов, я попробовал 2 небольших отрывка с веб-сайта W3, в 2 файлах Z1.php и Z2.php:

Z1

<?php // Start the session session_start(); include ('z2.php'); (I added this) ?> <html> <body> <?php // Set session variables $_SESSION["favcolor"] = "green"; $_SESSION["favanimal"] = "cat"; echo "Session variables are set."; ?> </body> </html> 

Я включил строку, чтобы включить Z2-Z2:

 <?php session_start(); (note: I tried with and without this) ?> <html> <body> <?php // Echo session variables that were set on previous page echo "Favorite color is " . $_SESSION["favcolor"] . ".<br>"; echo "Favorite animal is " . $_SESSION["favanimal"] . "."; ?> </body> </html> 

Я вложил все это в Zend и получил, как вывод,

Любимый цвет.
Любимое животное есть.

Мне нужно это, чтобы я мог использовать phpqrcode, который говорит о вызове QR-кода: «ПРЕДУПРЕЖДЕНИЕ! Это должен быть ПЕРВЫЙ и ТОЛЬКО вывод, сгенерированный скриптом, иначе остальная часть выхода выйдет в бинарном формате PNG, конечно, так оно и есть. Поэтому я подумал, что 2 сценария – это путь.

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

Павел

Solutions Collecting From Web of "Передача переменных PHP между скриптами"

Проблема, с которой вы сталкиваетесь, заключается в том, что вы z2.php скрипт z2.php в первый файл. Теперь представьте, что это как раз тот же самый php код во втором скрипте, скопированном и вставленном там. Вы начинаете session который вам нужен, чтобы получить зависание переменных, но вы пытаетесь echo их до их создания. Попробуйте включить z2.php после определения переменных Session и посмотреть, как это работает.

Проще говоря, попробуйте покончить с любым include . Вы взяли этот пример из W3Schools. Просто создайте два отдельных файла, как вы. Вызовите session_start() и создайте переменные session и попытайтесь получить доступ к другому файлу явно и посмотрите, можете ли вы получить к ним доступ.

Из документации –

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

Когда вы include скрипт в другой скрипт, как и вы, вы не передаете переменные сеанса. На самом деле то, что вы сделали, может быть достигнуто без использования сеансов вообще.

 //foo.php <?php $color = 'green'; $fruit = 'apple'; ?> //bar.php <?php echo "A $color $fruit"; // A include 'foo.php'; echo "A $color $fruit"; // A green apple ?> 

Что-то вроде этого вполне законно и отлично работает в PHP. Если вы действительно хотите проверить переменные Session в своей текущей настройке, вместо использования include вы можете сделать перенаправление на z2.php в конце z1.php , добавив следующие строки в конец файла:

 header("Location: z2.php"); die(); 

Надеюсь, это поможет вам начать в правильном направлении.