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

У меня возникли трудности с этим, поэтому я погуглил, а также читаю здесь, на 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 сценария — это то, что нужно.

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

Павел

0

Решение

Проблема, с которой вы здесь сталкиваетесь, заключается в том, что вы включаете z2.php скрипт в первом файле. Теперь представьте include так же, как 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();

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

0

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

Других решений пока нет …

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