89

我正在尝试将变量传递到包含文件中。我的主机更改了 PHP 版本,现在我尝试的任何解决方案都不起作用。

我想我已经尝试了我能找到的每一个选项。我相信这是最简单的事情!

该变量需要从调用的第一个文件中设置和评估(它实际上是$_SERVER['PHP_SELF'],并且需要返回该文件的路径,而不是包含的second.php)。

选项一

在第一个文件中:

global $variable;
$variable = "apple";
include('second.php');

在第二个文件中:

echo $variable;

选项二

在第一个文件中:

function passvariable(){
    $variable = "apple";
    return $variable;
}
passvariable();

选项三

$variable = "apple";
include "myfile.php?var=$variable"; // and I tried with http: and full site address too.


$variable = $_GET["var"]
echo $variable

这些都不适合我。PHP 版本是 5.2.16。

我错过了什么?

谢谢!

4

13 回答 13

58

您可以使用extract() 函数
Drupal 在其 theme() 函数中使用它。

这是一个带有$variables参数的渲染函数。

function includeWithVariables($filePath, $variables = array(), $print = true)
{
    $output = NULL;
    if(file_exists($filePath)){
        // Extract the variables to a local namespace
        extract($variables);

        // Start output buffering
        ob_start();

        // Include the template file
        include $filePath;

        // End buffering and return its contents
        $output = ob_get_clean();
    }
    if ($print) {
        print $output;
    }
    return $output;

}


./index.php :

includeWithVariables('header.php', array('title' => 'Header Title'));

./header.php :

<h1><?php echo $title; ?></h1>
于 2017-08-08T08:48:26.293 回答
50

选项 3 是不可能的 - 您将获得 .php 文件的渲染输出,就像您在浏览器中点击该 url 一样。如果您得到原始 PHP 代码(如您所愿),那么您网站的所有源代码都将被公开,这通常不是一件好事。

选项 2 没有多大意义 - 您将变量隐藏在函数中,并受 PHP 变量范围的约束。您还必须在$var = passvariable()某个地方将“内部”变量传递到“外部”,然后您又回到了原点。

选项 1 是最实用的。include()基本上会在指定的文件中啜饮并在那里执行它,就好像文件中的代码实际上是父页面的一部分。它看起来确实像一个全局变量,这里的大多数人对此不以为然,但根据 PHP 的解析语义,这两者是相同的:

$x = 'foo';
include('bar.php');

$x = 'foo';
// contents of bar.php pasted here
于 2012-08-10T15:55:11.473 回答
12

考虑到最基本的 php 中的 include 语句从文件中获取代码并将其粘贴到您调用它的位置,并且 include 手册指出以下事实:

当一个文件被包含时,它包含的代码继承了包含发生的行的变量范围。从那时起,调用文件中该行的任何可用变量都将在被调用文件中可用。

这些事情让我觉得总有一个不同的问题。此外,选项 3 将永远不会起作用,因为您没有重定向到second.php您只是将其包含在内,而选项 2 只是一个奇怪的解决方法。php中include语句最基本的例子是:

vars.php
<?php

$color = 'green';
$fruit = 'apple';

?>

test.php
<?php

echo "A $color $fruit"; // A

include 'vars.php';

echo "A $color $fruit"; // A green apple

?>

考虑到第一个选项最接近这个例子(即使它应该更复杂)并且它不起作用,它让我认为你在包含语句中犯了一个错误(相对于根或类似的错误路径问题)。

于 2012-08-10T15:59:13.370 回答
6

我这里有同样的问题,你可以使用 $GLOBALS 数组。

$GLOBALS["variable"] = "123";
include ("my.php");

它也应该这样做:

$myvar = "123";
include ("my.php");

....

echo $GLOBALS["myvar"];

祝你今天过得愉快。

于 2015-11-24T09:17:05.497 回答
6

选项 1在 PHP 7 中对我有用,而且在 PHP 5 中肯定也有用。并且全局范围声明对于变量访问的包含文件不是必需的,包含 - 或“必需” - 文件是脚本的一部分,只需确保在变量声明之后进行“包含”。也许您的 PHP.ini 中的变量全局范围有一些错误配置?

在第一个文件中尝试:

  <?php 
  $myvariable="from first file";
  include ("./mysecondfile.php"); // in same folder as first file LOLL
  ?>

我的第二个文件.php

  <?php 
  echo "this is my variable ". $myvariable;
  ?>

它应该可以工作......如果它不只是尝试重新安装 PHP。

于 2019-06-22T23:23:11.807 回答
5

关于OP的问题,特别是“需要从调用的第一个文件中设置和评估变量(它实际上是'$_SERVER ['PHP_SELF']',并且需要返回该文件的路径,而不是包含的第二个文件。 php)。”

这将告诉您哪个文件包含该文件。将其放在包含的文件中。

$includer = debug_backtrace();
echo $includer[0]['file'];
于 2012-08-10T15:57:51.577 回答
4

我遇到了这个问题,我有一个基于 GET 参数设置变量的文件。并且该文件无法更新,因为它在大型内容管理系统的另一部分上正常工作。然而,我想通过包含文件运行该代码,而参数实际上不在 URL 字符串中。简单的解决方案是您可以像设置任何其他变量一样在第一个文件中设置 GET 变量。

代替:

include "myfile.php?var=apple";

这将是:

$_GET['var'] = 'apple';
include "myfile.php";
于 2018-01-11T19:20:51.270 回答
1

根据 php 文档(参见$_SERVER) $_SERVER['PHP_SELF'] 是“当前执行脚本的文件名”。

INCLUDE 语句“包含并评估指定的”文件和“它包含的代码继承了包含发生的行的变量范围”(请参阅​​ INCLUDE)。

我相信 $_SERVER['PHP_SELF'] 将返回第一个文件的文件名,即使在“second.php”中的代码使用时也是如此。

我使用以下代码对此进行了测试,它按预期工作($phpSelf 是第一个文件的名称)。

// In the first.php file
// get the value of $_SERVER['PHP_SELF'] for the 1st file
$phpSelf = $_SERVER['PHP_SELF'];

// include the second file
// This slurps in the contents of second.php
include_once('second.php');

// execute $phpSelf = $_SERVER['PHP_SELF']; in the secod.php file
// echo the value of $_SERVER['PHP_SELF'] of fist file

echo $phpSelf;  // This echos the name of the First.php file.
于 2014-07-08T18:06:22.210 回答
1

我知道这是一个古老的问题,但现在偶然发现它并看到没有人提到这一点。所以写它。

如果像这样调整选项一,它也应该可以工作。

原本的

选项一

在第一个文件中:

global $variable; 
$variable = "apple"; 
include('second.php'); 

在第二个文件中:

echo $variable;

调整

在第一个文件中:

$variable = "apple"; 
include('second.php');

在第二个文件中:

global $variable;
echo $variable;
于 2020-11-14T13:00:59.450 回答
0

您可以在“second.php”中执行所有操作,使用 jQuery 添加变量

<div id="first"></div>

<script>
$("#first").load("second.php?a=<?php echo $var?>")
</scrpt>
于 2020-06-22T22:43:13.937 回答
-2

我发现 include 参数需要是整个文件路径,而不是相对路径或部分路径才能正常工作。

于 2016-07-21T19:23:31.750 回答
-3

This worked for me: To wrap the contents of the second file into a function, as follows:

firstFile.php

<?php
    include("secondFile.php");

    echoFunction("message");

secondFile.php

<?php
    function echoFunction($variable)
    {
        echo $variable;
    }
于 2017-11-19T17:07:38.267 回答
-4

做这个:

$checksum = "my value"; 
header("Location: recordupdated.php?checksum=$checksum");
于 2015-02-27T00:18:21.927 回答