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");