PHP传递variables来包含

我试图将一个variables传递给包含文件。 我的主机改变了PHP版本,现在无论我尝试什么解决scheme都不起作用。

我想我已经尝试了所有可以find的选项。 我相信这是最简单的事情!

variables需要从调用的第一个文件中设置和计算(实际上是$_SERVER['PHP_SELF'] ,并且需要返回该文件的path,而不是包含的second.php )。

选项一

在第一个文件中:

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

在第二个文件中:

 echo $variable; 

scheme二

在第一个文件中:

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

scheme三

 $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。

我错过了什么?

谢谢!

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

选项2没有多大意义 – 你将隐藏variables在函数中,并受PHP的variables范围。 你还必须在$var = passvariable()某个地方将“inside”variables赋值给“outside”,然后你又回到了原来的位置。

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

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

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

考虑到在最基本级别的php中包含语句需要从文件中获取代码,并将其粘贴到您称之为的地方,以及include上的手册说明了以下事实:

当包含文件时,它所包含的代码将inheritance包含所在行的variables范围。 从调用文件的那一行可用的任何variables将在被调用的文件中可用,从这一点开始。

这些东西让我觉得有一个不同的问题。 此外,选项号码3将永远不会工作,因为你没有redirect到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 ?> 

考虑到第一个选项是最接近这个例子(即使更复杂,那么它应该是),它不工作,它使我认为你在包含声明(相对于根或类似的错误path问题)。

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

这将告诉你什么文件包括该文件。 把它放在包含的文件中。

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

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

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

它也应该这样做:

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

祝你今天愉快。

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

根据PHP文档(请参阅$ _SERVER )$ _SERVER ['PHP_SELF']是“当前正在执行的脚本的文件名”。

INCLUDE语句“包含并评估指定的”文件,“它所包含的代码inheritance包含发生的行的variables范围”(请参阅INCLUDE )。

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

我用下面的代码testing了它,它按预期工作($ 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. 

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

这对我有效:将第二个文件的内容封装到一个函数中,如下所示:

firstFile.php

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

secondFile.php

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

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

通过将variables作为查询string添加到此URL,您可以将一个variables传递到包含的文件中 – 虽然会损失一些性能:

 include 'http://www.myservername.com/includes/second.php?variable=apple'; 

当然,你也必须设置second.php来处理$_GET['variable']并将其应用到输出。

做这个:

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