У меня возникли трудности с этим, поэтому я погуглил, а также читаю здесь, на 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 сценария — это то, что нужно.
Я не пытался передавать переменные между сценариями раньше, поэтому приветствую один или два критических взгляда на мои пробные попытки понять этот метод и направить меня на правильный путь.
Павел
Проблема, с которой вы здесь сталкиваетесь, заключается в том, что вы включаете 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();
Надеюсь, что это поможет вам начать в правильном направлении.
Других решений пока нет …