PHP传递变量以包含

use*_*646 75 php variables global global-variables include

我正在尝试将变量传递给包含文件.我的主机改变了PHP版本,现在无论我尝试什么解决方案都行不通.

我想我已经尝试了所有可以找到的选项.我确定这是最简单的事情!

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

选项一

在第一个文件中:

global $variable;
$variable = "apple";
include('second.php');
Run Code Online (Sandbox Code Playgroud)

在第二个文件中:

echo $variable;
Run Code Online (Sandbox Code Playgroud)

选项二

在第一个文件中:

function passvariable(){
    $variable = "apple";
    return $variable;
}
passvariable();
Run Code Online (Sandbox Code Playgroud)

选项三

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


$variable = $_GET["var"]
echo $variable
Run Code Online (Sandbox Code Playgroud)

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

我错过了什么?

谢谢!

Mar*_*c B 43

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

选项2没有多大意义 - 您将变量隐藏在函数中,并受PHP的变量范围限制.你还必须有一个$var = passvariable()地方可以将"内部"变量变为"外部",然后你又回到原点.

选项1是最实用的.include()将基本上在指定的文件中啜饮并在那里执行它,就好像文件中的代码实际上是父页面的一部分.它看起来像一个全局变量,大多数人都皱眉,但通过PHP的解析语义,这两个是相同的:

$x = 'foo';
include('bar.php');
Run Code Online (Sandbox Code Playgroud)

$x = 'foo';
// contents of bar.php pasted here
Run Code Online (Sandbox Code Playgroud)

  • @MattiaRasulo“Slurp”意味着读取文件的全部内容并将全部内容放在某处。基本上,“include()”复制包含的文件并将其内容粘贴到“include()”函数的位置。 (2认同)

小智 36

你可以使用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;

}
Run Code Online (Sandbox Code Playgroud)


./index.php:

includeWithVariables('header.php', array('title' => 'Header Title'));
Run Code Online (Sandbox Code Playgroud)

./header.php:

<h1><?php echo $title; ?></h1>
Run Code Online (Sandbox Code Playgroud)

  • 它适用于(PHP 4、PHP 5、PHP 7、PHP 8),谢谢您的回答,应标记为正确答案。 (2认同)

Flo*_*ciu 11

考虑到最基本级别的php中的include语句从文件中获取代码并将其粘贴到您调用它的位置,并且包含手册的事实说明如下:

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

这些事情让我觉得完全有一个不同的问题.选项编号3也永远不会起作用,因为你没有重定向到second.php你只是包含它而选项2只是一个奇怪的工作.php中包含statment的最基本的例子是:

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

?>
Run Code Online (Sandbox Code Playgroud)

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


小智 7

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

代替:

include "myfile.php?var=apple";
Run Code Online (Sandbox Code Playgroud)

这将是:

$_GET['var'] = 'apple';
include "myfile.php";
Run Code Online (Sandbox Code Playgroud)


Dan*_*iel 6

我在这里遇到同样的问题,你可以使用$ GLOBALS数组.

$GLOBALS["variable"] = "123";
include ("my.php");
Run Code Online (Sandbox Code Playgroud)

它也应该这样运行:

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

....

echo $GLOBALS["myvar"];
Run Code Online (Sandbox Code Playgroud)

祝你今天愉快.


Jer*_*026 5

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

这将告诉您文件中包含哪些文件。将此放置在包含的文件中。

$includer = debug_backtrace();
echo $includer[0]['file'];
Run Code Online (Sandbox Code Playgroud)


DrO*_*One 5

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

在第一个文件中尝试:

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

我的第二个文件

  <?php 
  echo "this is my variable ". $myvariable;
  ?>
Run Code Online (Sandbox Code Playgroud)

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