Php include中的变量参数

Php include中的变量参数,php,Php,我确信我使用了错误的方法,但这是我第一次尝试使用php。下一个代码不起作用。变量$file是本地定义的,但我不知道如何使用全局变量 articles.php 在此文件中,我有一个列表: <ol> <li><a <?php $file="a.php"; ?> href="article.php" > title 1 </a> </li> <li><a <?php $file="b.php";

我确信我使用了错误的方法,但这是我第一次尝试使用php。下一个代码不起作用。变量
$file
是本地定义的,但我不知道如何使用全局变量

articles.php 在此文件中,我有一个列表:

<ol>
  <li><a <?php $file="a.php"; ?> href="article.php" > title 1 </a>  </li>
  <li><a <?php $file="b.php"; ?> href="article.php" > title 2  </a>  </li>
</ol>

  • article.php在这个文件中,我想使用这个

      <?php   include("articles/$file"); ?>
    
    
    
    如何正确定义
    $file

    有没有更好的方法来加载
    a.php
    b.php

    你做错了

    每个php文件的执行都类似于服务器上单独的应用程序执行。执行代码并将页面发送到浏览器后,服务器将忘记所有变量。您不能像那样将数据从一个页面传递到另一个页面

    要将某些值传递到下一页,必须使用以下方法之一:

    • 投递或获取
    • 饼干
    • 会议
    PHP web应用程序在这方面是非常特殊的,如果您想用PHP编写web应用程序,您必须完全了解这一点

    更多信息请点击此处:


    使用例如$\u GET传递:

    <ol>
      <li><a href="article.php?f=a" > title 1 </a>  </li>
      <li><a href="article.php?f=b" > title 2  </a>  </li>
    </ol>
    

    HTH

    您可以这样做:

    articles.php

    <ol>
      <li><a href="article.php?page=a" > title 1 </a></li>
      <li><a href="article.php?page=b" > title 2  </a></li>
    </ol>
    
    if( $_SERVER[REQUEST_METHOD] == 'GET' && !empty($_GET[page]) ) {
        $path = $_GET[page] . ".php"; // transform into a filename (a.php)
    
        if( file_exists($path) ) {
            include_once $path;
        }
    }
    

    在这里,您将检查请求的方法是否为
    GET
    ,以及
    页面
    变量是否为空。然后将
    .php
    添加到变量中,使其成为完整的文件名,并检查它是否存在。如果有,它将被包括在内。注意,这不是消毒过的。您可以添加一个可接受的文件名数组,并遍历这些文件名以检查它们是否有效。

    您可能正在尝试这样做(这是通过HTTP GET传递一些值)


    第1页(page1.php)-包含带有参数
    文件
    和值
    page3

    <a href="page2.php?file=page3">
    
    
    

    第2页(page2.php)-应该使用URL中的“file”参数打开的页面

    <?php
        $file = $_GET["file"]; // takes parameter "file" from URL
        include($file."php");  // Dot is used for "adding" strings
    ?>
    
    
    

    第3页(page3.php)-要包括的测试页

    <?php
        echo "This is included page3.php!"
    ?>
    
    
    

    将此视为最简单的学习代码。在实际应用中有很多事情要做

    “在现实世界中”您必须检查(使用IF语句):

  • 如果文件是通过GET请求调用的(
    $\u服务器[request\u方法]==“GET”
  • 如果url
    中有参数!空($\u GET['file'])
  • 如果URL中提供名称的文件存在
    file\u存在($file.php”)
  • 为了避免PHP致命错误,当有人在没有参数或文件名错误的情况下手动将URL写入您的
    page2.PHP


    Aarolama Bluenk用这些必要的操作编写了答案(见下/上)。

    使用此类代码时要格外小心。现在,如果这段代码正常工作,它将使您的服务器面临一个完全的、简单的远程危害。e、 g.
    http://example.com?file=http://malicioussite.com/attack_script.php
    和poof。。。您正在执行攻击者选择的脚本。
    articles/
    部分是一个次要的防御,但仍然允许攻击者加载并显示系统上他们知道完整路径的任何文件。是的,我知道我使用了错误的方法。你的回答有助于我理解其他答案。谢谢!我需要尝试你的代码,并尝试理解与其他答案的差异。这种代码的安全性似乎非常重要。我需要研究如何定义一个可接受的文件名数组以及如何使用它。有趣的是,这段代码看起来很简单。你知道一本好的手册或网站,了解如何使用html和php管理页面吗?有必要了解答案之间的差异,我知道。您可能会访问PHP和其他语言的视频教程或非常好的视频教程。我添加了一些额外的信息,说明为什么我的脚本如此简单(在回答的末尾)。感谢您提出的切换想法,但我不理解“健全性检查”、“白名单”和“切换”之间的联系。如果您获得例如“c”作为参数,它不会尝试包含它,因为它不在您的白名单a中,b与交换机中的案例一起完成。
    <?php
        echo "This is included page3.php!"
    ?>