PHP传递变量以包含

时间:2012-08-10 15:50:11

标签: php variables include global-variables global

我正在尝试将变量传递到 include 文件中。我的主机改变了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。

我错过了什么?

谢谢!

14 个答案:

答案 0 :(得分:38)

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

选项2没有多大意义 - 您将变量隐藏在函数中,并受PHP的变量范围限制。你还必须在某个地方$var = passvariable()将“内部”变量变为“外部”,然后你回到正方形。

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

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

$x = 'foo';
// contents of bar.php pasted here

答案 1 :(得分:29)

您可以使用extract() function
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>

答案 2 :(得分:8)

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

  

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

这些让我觉得完全存在不同的问题。此外,选项编号3将永远不会起作用,因为您没有重定向到second.php您只是包含它而选项编号2只是一个奇怪的工作。 php中包含语句的最基本示例是:

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

?>

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

答案 3 :(得分:5)

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

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

它也应该这样做:

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

....

echo $GLOBALS["myvar"];

度过愉快的一天。

答案 4 :(得分:4)

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

这将告诉您文件中包含的文件。将其放在附带的文件中。

$includer = debug_backtrace();
echo $includer[0]['file'];

答案 5 :(得分:0)

根据php文档(参见$_SERVER)$ _SERVER [&#39; PHP_SELF&#39;]是当前正在执行的脚本的#34;文件名&#34;。

INCLUDE语句&#34;包括并评估指定的&#34; file和&#34;它包含的代码继承了包含发生的行的变量范围&#34; (见INCLUDE)。

我相信$ _SERVER [&#39; PHP_SELF&#39;]会返回第一个文件的文件名,即使是在&#39; second.php&#39;中使用的代码也是如此。

我使用以下代码测试了它,它按预期工作($ 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.

答案 6 :(得分:0)

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

而不是:

public class Application {

public static void main(String[] args)throws Exception {

   FileOutputStream fos = new FileOutputStream("samplefile.docx");

   XWPFDocument document = new XWPFDocument();

   // New 2x2 table
    XWPFTable tableOne = document.createTable();
    XWPFTableRow tableOneRowOne = tableOne.getRow(0);
    tableOneRowOne.getCell(0).setText("Hello");
    tableOneRowOne.addNewTableCell().setText("World");

    XWPFTableRow tableOneRowTwo = tableOne.createRow();
    tableOneRowTwo.getCell(0).setText("This is");
    tableOneRowTwo.getCell(1).setText("a table");

    // Add a break between the tables
    document.createParagraph().createRun().addBreak();

    // New 3x3 table
    XWPFTable tableTwo = document.createTable();
    XWPFTableRow tableTwoRowOne = tableTwo.getRow(0);
    tableTwoRowOne.getCell(0).setText("col one, row one");
    tableTwoRowOne.addNewTableCell().setText("col two, row one");
    tableTwoRowOne.addNewTableCell().setText("col three, row one");

    XWPFTableRow tableTwoRowTwo = tableTwo.createRow();
    tableTwoRowTwo.getCell(0).setText("col one, row two");
    tableTwoRowTwo.getCell(1).setText("col two, row two");
    tableTwoRowTwo.getCell(2).setText("col three, row two");

    XWPFTableRow tableTwoRowThree = tableTwo.createRow();
    tableTwoRowThree.getCell(0).setText("col one, row three");
    tableTwoRowThree.getCell(1).setText("col two, row three");
    tableTwoRowThree.getCell(2).setText("col three, row three");

    document.write(fos);
    fos.close();
    System.out.println("Success!");
   }
}

这将是:

include "myfile.php?var=apple";

答案 7 :(得分:0)

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

尝试第一个文件:

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

mysecondfile.php

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

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

答案 8 :(得分:0)

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

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

<script>
$("#first").load("second.php?a=<?php echo $var?>")
</scrpt>

答案 9 :(得分:0)

我知道这是一个老问题,但是现在偶然发现了这个问题,没有人提及。所以写吧。

选项一如果进行了这样的调整,它也应该起作用。

原始

选项一

在第一个文件中:

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

在第二个文件中:

echo $variable;

调整

在第一个文件中:

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

在第二个文件中:

global $variable;
echo $variable;

答案 10 :(得分:-1)

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

答案 11 :(得分:-1)

这对我有用:将第二个文件的内容包装成一个函数,如下所示:

firstFile.php

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

    echoFunction("message");

secondFile.php

<?php
    function echoFunction($variable)
    {
        echo $variable;
    }

答案 12 :(得分:-3)

PHP 5.2.0添加了allow-url-include指令(默认为0,必须更改为1中的php.ini),这意味着您可以传递完整{{3}} 1}} http:语句的URL。

通过将您的变量作为查询字符串添加到此URL,您可以将变量传递到包含的文件中 - 尽管有一些性能损失:

include

当然,您还必须设置include 'http://www.myservername.com/includes/second.php?variable=apple'; 来处理second.php并将其应用于输出。

答案 13 :(得分:-3)

这样做:

$checksum = "my value"; 
header("Location: recordupdated.php?checksum=$checksum");