所以我有三个文件。
文件1 包括文件 2,其中包括文件 3
文件 1 需要打印文件 3 中定义的 VAR 1
我该怎么做?它没有为我回响
文件 1
<?php
if ($_GET["pg"]==false)
echo "<title>Socal Mods</title>";
else
echo $title_name;
?>
文件 2
<?php
if ($_GET["pg"]==false)
include("home.php");
else
include("".$_GET["pg"].".php");
?>
文件 3
<?php $title_name="<title>Socal Mods</title>" ?>
文件 3 正在解析为作为显示容器的文件 1,但 %title_name 未回显
首先是关于如何访问GET变量的一件事。您可以使用 $_GET["pg"] == false
检查该值。请注意,在很多情况下,此表达式将无法执行您的预期操作。事实上,价值永远不会被直接false
。如果它是空的或未设置的,它等于false
的唯一方法(在这种情况下,您还将收到编译器警告,您应该避免)。通常,检查是否设置了值的更安全方法是使用 isset( $_GET["pg"] )
。
接下来我想解决的是你引入的安全问题。直接使用 GET 值来包含具有该名称的文件。如果我是一个有恶意的用户,我可以轻松地将pg
值设置为您通常不会想到的内容,并且以某种方式破坏您的网站。通常应避免使用用户以某种方式输入的数据(请求参数是用户数据),并确保首先清理它们。当您计划使用该值作为要包含的页面的基础时,执行此操作的一个好方法是使用某种可接受/允许值的白名单。然后,您可以检查输入的数据是否在该白名单中,如果是这种情况,请包含正确的页面。另一种简单的方法是使用 switch
语句简单地浏览所有接受的情况。
现在最后,进入您的问题:我不确定这是否只是您发布代码时的错误,但是文件 1 缺少文件 2 的包含。因此,您将永远不会包含文件 3,当然也永远不会设置变量。
另一个问题可能是 GET 值的使用。如果该值不包含确切的文件名(如大小写且没有额外的空格),则不会找到该文件。最好回显出要包含在文件 2 中的文件名,只是为了检查您是否犯了任何错误。如上所述的白名单将是确保您尝试包含正确文件的另一种方法。
最后,您应该在服务器上启用错误报告,您可以在服务器配置中执行此操作,也可以通过将以下行添加到第一个文件(即文件 1)的顶部来执行此操作:
error_reporting( E_ALL );
这样,您将收到错误和警告,这些错误和警告将告诉您运行时是否发生了意外情况,并且您可能会更容易看到错误。
旧答案
一般来说,它的工作原理是这样的:
文件 1:
<?php
include 'file2.php';
echo $myVariable; // prints 'Hello World!'
?>
文件 2:
<?php
include 'file3.php';
?>
文件 3:
<?php
$myVariable = 'Hello World!';
?>
echo $title_name = "<title>Socal Mods</title>";
这意味着它的回声html,因此"Socal Mods"将在标题栏中而不是正文中看到。我希望您正在标题栏中查看。要在文件 1 中使用文件 3 中可用的 $title_name,您需要在文件 3 中包含 file1。
脚本中是否包含文件 3?您是否实际验证并确认了该文件已包含在内?如果将脚本中的 include
语句更改为 require
语句,则 PHP 将停止并显示错误(如果您要查找的文件不存在)。
文件的原因有很多。如果文件名包含大写字母,而请求仅包含小写字母,则在服务器使用区分大小写的文件系统时,将遇到问题。
此外,在使用它来包含文件之前,您应该清理用户输入。您不希望我能够在您的服务器上的任何位置包含任何文件,是吗?
必须创建、设置并赋值,然后才能回显。
最有可能(请向我们展示一些代码),您的问题不是文件包含,而是您正在尝试在为变量赋值之前回显变量。