【问题标题】:Passing PHP variables between scripts在脚本之间传递 PHP 变量
【发布时间】:2014-10-09 03:07:40
【问题描述】:

我对此有困难,所以我用谷歌搜索并在 SO 上阅读了这里。最后,我尝试了来自 W3 网站的 2 个小摘录,在 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 个脚本将是要走的路。

我以前没有尝试在脚本之间传递变量,所以欢迎一两个批评的眼睛来尝试理解这种方法并让我走上正确的道路。

保罗

【问题讨论】:

    标签: php variables scripting


    【解决方案1】:

    您在这里面临的问题是您将z2.php 脚本包含在第一个文件中。现在想象include 与复制并粘贴在那里的第二个脚本中的php 代码相同。您应该启动 session 以了解变量,但您尝试在创建它们之前 echo 它们。在定义 Session 变量后尝试包含 z2.php 并从那里查看它是如何工作的。

    简单地说,尝试取消任何include。你从 W3Schools 获得了this example。只需像您一样创建两个单独的文件。调用session_start() 并创建session 变量并尝试显式访问其他文件并查看是否可以访问它们。

    来自documentation -

    当一个文件被包含时,它包含的代码继承了包含发生的行的变量范围。从那时起,调用文件中该行的任何可用变量都将在被调用文件中可用。但是,包含文件中定义的所有函数和类都具有全局范围。

    当您像您一样在另一个脚本中include 一个脚本时,您实际上并没有传递会话变量。事实上,你所做的事情根本不需要使用 Sessions 就可以实现。

    //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 变量,您可以通过在文件末尾添加以下行来重定向到z1.php 末尾的z2.php,而不是使用include: /p>

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

    希望这能让你朝着正确的方向开始。

    【讨论】:

    • 感谢您非常明确的回复。在你的帮助下,我理解了更多(并且让我的脚本做我想做的事!)保罗