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