【问题标题】:How to declare a variable in php while including files?如何在包含文件的同时在 php 中声明变量?
【发布时间】:2011-08-30 03:14:30
【问题描述】:

所以我有三个文件。

文件 1 包括文件 2,文件 2 包括文件 3

FILE 1 需要打印 FILE 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 没有回显

【问题讨论】:

  • 你能把你的代码贴在这里吗?
  • 检查包含的顺序

标签: php file variables include


【解决方案1】:

首先要了解如何访问 GET 变量。您使用$_GET["pg"] == false 检查该值。请注意,此表达式在很多情况下都无法达到您的预期。事实上,值永远不会直接是false。如果它为空或未设置,它将等于false 的唯一方法(在这种情况下,您还会收到编译器警告,您应该避免这种情况)。通常更安全的方法是使用isset( $_GET["pg"] ) 来检查值是否已设置。

我要解决的下一个问题是您引入的安全问题。您可以直接使用 GET 值来包含具有该名称的文件。如果我是一个有恶意的用户,我可以很容易地将pg 值设置为一些你通常不会想到的东西,它会以某种方式破坏你的网站。您通常应该避免使用用户以某种方式输入的数据(请求参数是用户数据),并确保首先对其进行清理。当您计划将该值用作要包含的页面的基础时,执行此操作的一个好方法是拥有某种可接受/允许值的白名单。然后您可以检查输入的数据是否在该白名单中,如果是,请包含正确的页面。另一种简单的方法是使用switch 语句来简单地检查所有已接受的案例。

现在最后,解决您的问题:我不确定这是否只是您发布代码时的错误,但文件 1 缺少文件 2 的包含。因此,您将永远不会包含文件 3,当然该变量永远不会被设置。

另一个问题可能是 GET 值的使用。如果该值不包含 exact 文件名(如在大小写中且没有额外的空格),则不会找到该文件。回显要包含在文件 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!';
 ?>

【讨论】:

  • 问题是,我不能在页面后面包含文件,然后 var 不起作用
【解决方案2】:
echo    $title_name = "<title>Socal Mods</title>";

这意味着它的回显html,所以“Socal Mods”将出现在标题栏中而不是正文中。我希望你在看标题栏。并且要在文件 1 中使用 $title_name,它在文件 3 中可用,您可以将 file3 包含在文件 1 中。

【讨论】:

  • 该行没有回显任何内容。
  • @Arjan 是的,它不会在文档正文上回显任何内容,而是会显示在标题栏上
  • 它确实显示在标题栏中,
  • 这意味着它已经成功执行。如果你只想回显然后从 $title_name 中删除标题标签。然后你查看变量的值。
【解决方案3】:

文件 3 是否包含在脚本中?您是否真的验证并确认该文件已包含在内?如果将脚本中的include 语句更改为require 语句,如果您要查找的文件不存在,PHP 将停止并报错。

找不到文件的原因有很多。如果文件名包含大写字母而请求中只包含小写字母,那么如果服务器使用区分大小写的文件系统,就会遇到问题。

您还应该在使用用户输入来包含文件之前对其进行清理。您不希望我能够在您服务器上的任何位置包含任何文件,对吗?

【讨论】:

    【解决方案4】:

    必须先创建、设置并分配一个值,然后才能回显变量。

    很可能(请向我们展示一些代码),您的问题不在于文件包含,而是您试图在变量赋值之前对其进行回显。

    【讨论】:

      猜你喜欢
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 2019-03-06
      • 1970-01-01
      • 1970-01-01
      • 2011-05-05
      • 2017-08-04
      相关资源
      最近更新 更多