PHP 通过变量来包含

我试图将一个变量传递到 包括文件中。我的主机更改了 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。

我错过了什么?

谢谢!

173197 次浏览

Option 3 is impossible - you'd get the rendered output of the .php file, exactly as you would if you hit that url in your browser. If you got raw PHP code instead (as you'd like), then ALL of your site's source code would be exposed, which is generally not a good thing.

Option 2 doesn't make much sense - you'd be hiding the variable in a function, and be subject to PHP's variable scope. You'ld also have to have $var = passvariable() somewhere to get that 'inside' variable to the 'outside', and you're back to square one.

option 1 is the most practical. include() will basically slurp in the specified file and execute it right there, as if the code in the file was literally part of the parent page. It does look like a global variable, which most people here frown on, but by PHP's parsing semantics, these two are identical:

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

and

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

In regards to the OP's question, specifically "The variable needs to be set and evaluated from the calling first file (it's actually '$_SERVER['PHP_SELF']', and needs to return the path of that file, not the included second.php)."

This will tell you what file included the file. Place this in the included file.

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

Considering that an include statment in php at the most basic level takes the code from a file and pastes it into where you called it and the fact that the manual on include states the following:

When a file is included, the code it contains inherits the variable scope of the line on which the include occurs. Any variables available at that line in the calling file will be available within the called file, from that point forward.

These things make me think that there is a diffrent problem alltogether. Also Option number 3 will never work because you're not redirecting to second.php you're just including it and option number 2 is just a weird work around. The most basic example of the include statment in php is:

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


?>

Considering that option number one is the closest to this example (even though more complicated then it should be) and it's not working, its making me think that you made a mistake in the include statement (the wrong path relative to the root or a similar issue).

According to php docs (see $_SERVER) $_SERVER['PHP_SELF'] is the "filename of the currently executing script".

The INCLUDE statement "includes and evaluates the specified" file and "the code it contains inherits the variable scope of the line on which the include occurs" (see INCLUDE).

I believe $_SERVER['PHP_SELF'] will return the filename of the 1st file, even when used by code in the 'second.php'.

I tested this with the following code and it works as expected ($phpSelf is the name of the first file).

// 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.

Do this:

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

I have the same problem here, you may use the $GLOBALS array.

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

It should also run doing this:

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


....


echo $GLOBALS["myvar"];

Have a nice day.

I found that the include parameter needs to be the entire file path, not a relative path or partial path for this to work.

You can use the extract() function
Drupal use it, in its theme() function.

Here it is a render function with a $variables argument.

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>

This worked for me: To wrap the contents of the second file into a function, as follows:

firstFile.php

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


echoFunction("message");

secondFile.php

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

I've run into this issue where I had a file that sets variables based on the GET parameters. And that file could not updated because it worked correctly on another part of a large content management system. Yet I wanted to run that code via an include file without the parameters actually being in the URL string. The simple solution is you can set the GET variables in first file as you would any other variable.

Instead of:

include "myfile.php?var=apple";

It would be:

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

OPTION 1 worked for me, in PHP 7, and for sure it does in PHP 5 too. And the global scope declaration is not necessary for the included file for variables access, the included - or "required" - files are part of the script, only be sure you make the "include" AFTER the variable declaration. Maybe you have some misconfiguration with variables global scope in your PHP.ini?

Try in first file:

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

mysecondfile.php

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

It should work... if it doesn't just try to reinstall PHP.

You can execute all in "second.php" adding variable with jQuery

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


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

I know this is an old question, but stumbled upon it now and saw nobody mentioned this. so writing it.

The Option one if tweaked like this, it should also work.

The Original

Option One

In the first file:

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

In the second file:

echo $variable;

TWEAK

In the first file:

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

In the second file:

global $variable;
echo $variable;

An alternative to using $GLOBALS is to store the variable value in $_SESSION before the include, then read it in the included file. Like $GLOBALS, $_SESSION is available from everywhere in the script.

Pass a variable to the include file by setting a $_SESSION variable

e.g.

$_SESSION['status'] = 1; include 'includefile.php';

// then in the include file read the $_SESSION variable

$status = $_SESSION['status'];