PHP:在包含的脚本之间访问变量

时间:2014-10-20 19:20:44

标签: php variables include

如果在脚本中包含多个PHP脚本,脚本可以访问哪些变量?例如,我有一个名为post.php的文件。在此我有......

include(email.php);
include(input.php);

这些脚本中的变量是否自包含,即使它们“包含”在同一页面上?如果是,我如何在每个脚本中访问它们。我问,因为我不能调用我在其他脚本中定义的“post.php”中的变量。感谢

使用完整代码进行编辑

这是我收集用户数据的第一页:

<form action="postinput.php" method="post">
<input type="text" placeholder="Name"name="Name"><br>
<input type="text" placeholder="Email"name="Email"><br>

<input type="text" placeholder="Title"name="Title"><br>
<textarea placeholder="Post" rows="4" cols="22" placeholder="Post"name="Post"></textarea>
</form>

这是我获取此数据的第二页,并使用fopen从提供的数据中创建一个随机的“post”页面:

$getname = $_POST['Name'];
$getemail = $_POST['Email']; //Here is the email variable I am trying to pass
$gettitle = $_POST['Title'];
$myfile = fopen("$random" . ".php", "w");
$txt = "<?php  include('post.php'); \$email = \"$getemail\";?>" //pass email variable and include post.php
fwrite($myfile, $txt);
print("you can see your post here:");
echo ('http://localhost/' . $random . '.php');

这是post.php。这应该包括我上面传递的$ email变量,但我甚至无法回显该变量。如果我拉出生成的php页面,我可以看到变量已声明但我仍然无法访问它。

<?php
include('Header.php');
?>

<div id = "center">
    <form action="" name="emailform" method="post">
        <input type="text" name="name">
        <input type="text" name="email">
        <input type="text" name="message">
        <input type="submit" name="Send" value="Send Email">
    </form>
</div>

<?php

echo $email;

if (isset($_POST['Send'])) {

    $name = $_POST['name'];
    $visitor_email = $_POST['email'];
    $message = $_POST['message'];

    $email_from = 'trustyclient@yoursite.com';
    $email_subject = "You have a reply from better barter";
    $email_body = "Message from: $visitor_email \n \n Message:$message";

    $to = $email;
    $headers = "from:adam\r\n";

    mail($to,$email_subject,$email_body,$headers);

} else {
    echo 'You have not hit the submit button yet';
}
?>

3 个答案:

答案 0 :(得分:2)

您不需要大括号:include 'email.php';

始终使用包含/ require include __DIR__ . '/email.php'的路径。

在include / require之后变量可用。

请注意,这可能会覆盖现有变量。

PHP手册 - include()

  

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


您有post.php并希望访问email.php中定义的变量。

email.php

<?php
$var = 'Hello';

post.php中

<?php 
include __DIR__ . '/email.php';
echo $var;

您正在创建一个随机的php文件。

$txt = "<?php  include('post.php'); \$email = \"$getemail\";?>"

这部分\$email = \"$getemail\"对我来说很奇怪。我认为这一行应该是:

$txt = "<?php include 'post.php'; $email = '" . $getemail . "'; ?>";

您可以附加echo $email;并调用random.php进行测试,如下所示:

$txt = "<?php include 'post.php'; $email = '" . $getemail . "'; echo $email; ?>";

顺便说一下:这是一种模板方法。您正在插入内容以生成新文件。

答案 1 :(得分:1)

如果您设置了变量且它们是唯一的,您可以从包含脚本的位置访问它们!

答案 2 :(得分:0)

Variables operate in 3 scopes全局功能对象/类。无论变量属于哪个范围,都不受includeinclude_oncerequirerequire_once的影响。

全局

全局变量只能在函数和类 OR $GLOBALS superglobal之外访问。但是,变量不受namespaces影响。

功能

函数内部使用的变量仅对该函数可用,并在函数运行后复位。请注意,在运行该函数后,static变量不会重置。此外,虽然变量不受包含或要求的影响,但如果在函数内部使用include / require,则包含的文件及其变量在该函数的范围内。

对象/类

实例化对象或类(例如stdClass)中使用的变量对于该实例是唯一的。而静态类只有一个变量的全局实例。重要的是要注意,虽然它们在对象中使用,但您必须通过正确的命名空间访问对象(以及代理的变量),如下所示:

<强>实例化

$helloWorld = \myNamespace\helloWorld();
echo $helloWorld->myVar

<强>静态

echo \myNamespace\helloWorld::$myVar