2

我想将包含文件identity.php中定义的变量传递给父文件,我将其称为parent.php。当我通过它的相对路径包含 identity.php 时,该变量可用于parent.php文件。当我通过它的绝对路径(到应用程序根目录)包含identity.php时,它不起作用。为什么是这样?

文件:identity.php

$g_groupid = 2;

文件:父.php

include('absolute_path_to_identity.php');
echo $g_groupid; //NOTHING!

但是...
文件:parent.php

include('../../identity.php'); //relative path to include file 
echo $g_groupid; //echos 2 as expected

我已经通过回显“身份文件包含消息”(来自identity.php文件中)验证了这两种情况下都包含identity.php,该消息显示为相对和绝对包含。这种行为的原因可能是什么?

4

4 回答 4

0

这听起来像您的“绝对路径”是一个 URL,http://www.example.com/folder/identity.php 如果是这种情况,PHP 将使用 HTTP 从 Web 服务器获取代码,因此所有 PHP 代码将在包含文件之前进行评估。

这也将给出您在echo故障排除中描述的行为。

“绝对路径”在表单上/home/user/public_html/folder/identity.php,​​与 URL 不同。


考虑一下:

身份.php

<?php
echo 'Is included';
$g_groupid = 2;
?>

当由 PHP 解释器评估时,这将产生以下原始文本:

Is included

如果您将该原始文本包含在parent.php中,它将表现得好像它是没有任何 PHP 代码的原始 HTML,因为<?php该原始文本中没有标签。然后考虑这个identity.php

<?php
echo 'Is included <?php $g_groupid = 3; ?>';
$g_groupid = 2;
?>

这将导致:

Is included <?php $g_groupid = 3; ?>

你现在在你的parent.php中得到什么结果?是 $g_groupid2还是3

于 2012-06-17T11:02:05.697 回答
0

您是否尝试使用realpath()

require_once(realpath('../../identity.php'));

另外,如果错误报告尚未打开,我建议关闭它,以便您确保文件确实包含在内,并获取更多信息。将此添加到文件顶部:

ini_set("display_errors","On");
error_reporting(E_ALL);
于 2012-06-17T11:04:53.023 回答
0

你确定你的绝对路径有效吗?

我有类似的问题,在这种情况下,我总是使用通过 DOCUMENT_ROOT 的完整路径

include($_SERVER['DOCUMENT_ROOT']."/your_file_path.php");
于 2015-11-15T00:18:53.813 回答
-3

嗯,试试:

include('absolute_path_to_identity.php');
global $g_groupid;
echo $g_groupid;
于 2012-06-16T11:53:45.760 回答