要包含的PHP传递变量

要包含的PHP传递变量,php,variables,include,global-variables,global,Php,Variables,Include,Global Variables,Global,我试图将一个变量传递到包含文件中。我的主机更改了PHP版本,现在我尝试的任何解决方案都不起作用 我想我已经尝试了我能找到的每一个选择。我相信这是最简单的事情 变量需要从调用的第一个文件(实际上是$\u服务器['PHP\u SELF'],需要返回该文件的路径,而不是包含的second.PHP)进行设置和计算 选项一 $variable = "apple"; include "myfile.php?var=$variable"; // and I tried with http: and full

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

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

变量需要从调用的第一个文件(实际上是
$\u服务器['PHP\u SELF']
,需要返回该文件的路径,而不是包含的
second.PHP
)进行设置和计算

选项一

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


$variable = $_GET["var"]
echo $variable
在第一个文件中:

global $variable;
$variable = "apple";
include('second.php');
function passvariable(){
    $variable = "apple";
    return $variable;
}
passvariable();
  <?php 
  $myvariable="from first file";
  include ("./mysecondfile.php"); // in same folder as first file LOLL
  ?>
global $variable; 
$variable = "apple"; 
include('second.php'); 
$variable = "apple"; 
include('second.php');
在第二个文件中:

echo $variable;
global $variable;
echo $variable;
选项二

在第一个文件中:

global $variable;
$variable = "apple";
include('second.php');
function passvariable(){
    $variable = "apple";
    return $variable;
}
passvariable();
  <?php 
  $myvariable="from first file";
  include ("./mysecondfile.php"); // in same folder as first file LOLL
  ?>
global $variable; 
$variable = "apple"; 
include('second.php'); 
$variable = "apple"; 
include('second.php');
选项三

$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没有多大意义-您将把变量隐藏在函数中,并受PHP变量范围的约束。您还必须有
$var=passvariable()
的地方才能将“内部”变量转换为“外部”,这样您就回到了原点

选择1是最实际的
include()
基本上会在指定的文件中发出声音并在那里执行,就好像文件中的代码实际上是父页面的一部分。它看起来确实像一个全局变量,这里的大多数人都不喜欢它,但根据PHP的解析语义,这两个变量是相同的:

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


关于OP的问题,特别是“需要从调用的第一个文件(实际上是“$\u SERVER['PHP\u SELF']”来设置和计算变量,并且需要返回该文件的路径,而不是包含的第二个.PHP文件)

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

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

考虑到php中最基本级别的include语句从文件中获取代码并将其粘贴到调用它的位置,以及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

?>
vars.php
test.php
考虑到选项1最接近这个示例(尽管它应该更复杂),并且它不起作用,这让我认为您在include语句中犯了错误(相对于根的错误路径或类似问题)。

根据php文档(请参阅)$\u SERVER['php\u SELF']是“当前执行脚本的文件名”

INCLUDE语句“包含并计算指定的”文件,并且“它包含的代码继承发生INCLUDE的行的变量范围”(请参阅)

我相信$\u SERVER['PHP\u SELF']将返回第一个文件的文件名,即使在“second.PHP”中的代码使用时也是如此

我用以下代码对此进行了测试,结果与预期一样($phpSelf是第一个文件的名称)

这样做:

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

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

$GLOBALS["variable"] = "123";
include ("my.php");
它还应该执行以下操作:

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

....

echo $GLOBALS["myvar"];

祝您度过愉快的一天。

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

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

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

函数includeWithVariables($filePath,$variables=array(),$print=true)
{
$output=NULL;
如果(文件_存在($filePath)){
//将变量提取到本地名称空间
提取($变量);
//启动输出缓冲
ob_start();
//包括模板文件
包括$filePath;
//结束缓冲并返回其内容
$output=ob_get_clean();
}
如果($print){
打印$输出;
}
返回$output;
}

/index.php:

includeWithVariables('header.php',array('title'=>'header title');
/header.php:


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

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

而不是:

include "myfile.php?var=apple";
它将是:

$_GET['var'] = 'apple';
include "myfile.php";

选项1在PHP7中对我有效,当然在PHP5中也有效。对于变量访问,包含的文件不需要全局范围声明,包含的或“必需”的文件是脚本的一部分,只需确保“包含”“在变量声明之后。也许您在PHP.ini中对变量全局范围有一些错误配置

在第一个文件中尝试:

global $variable;
$variable = "apple";
include('second.php');
function passvariable(){
    $variable = "apple";
    return $variable;
}
passvariable();
  <?php 
  $myvariable="from first file";
  include ("./mysecondfile.php"); // in same folder as first file LOLL
  ?>
global $variable; 
$variable = "apple"; 
include('second.php'); 
$variable = "apple"; 
include('second.php');

mysecondfile.php

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

它应该有用。。。如果它不只是尝试重新安装PHP。

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

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

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

$(“#first”).load(“second.php?a=“)

我知道这是一个老问题,但现在我无意中发现了它,没有人对此表示怀疑