我可以使用'?P = pagename'创建PHP页面吗?

时间:2018-12-22 14:34:32

标签: php html

我正在尝试使用PHP设置网站,而我对PHP还是比较陌生。我希望能够格式化以下格式的页面:http://example.com/index.php?p=pagename,其中参数/?p是页面,参数=pagename是页面名称。

我尝试了一种使用方法: <?php include('page.php') ?> 但这不会产生我想要的结果。这样会使另一个页面显示在同一页面中。

这是我尝试过的:

<?php include('page.php') ?>

我也尝试过:

<?php echo file_get_contents("html/header1.html"); ?>
<title>Cool Page</title>
<?php echo file_get_contents("html/header2.html"); ?>
This is page 1, the home page.
<?php echo file_get_contents("html/footer.html"); ?>

<?php include('html/header1.html'); ?>
<title>Cool Page</title>
<?php include('html/header2.html'); ?>
This is page 1, the home page.
<?php include('html/footer.html'); ?>

我期望的是我希望能够输入http://example.com/index.php?p=coolpage来获得一个名为“酷页面”的页面(如果可用!),但是我不知道它是如何工作的。

感谢您提供的任何帮助!

3 个答案:

答案 0 :(得分:2)

这里有2个大问题。第一个是您的代码不尝试读取URL中提供的数据,第二个是您正在创建一个非常不安全的应用程序。

PHP将解析来自浏览器和populate the data in at least one of the superglobal variables的请求。具体来说,将query part of the URL中的参数添加到$ _REQUEST和$ _GET中。因此:

<?php

include($_GET['p'] . ".php");

出现,以按您的要求运行,并显示该代码所在目录中的coolpage.php输出。但是,上面的代码允许任何人在服务器上运行他们想要的任何代码(默认情况下,include / require可以从http [s]位置以及本地文件系统读取)。以下内容更加安全-将执行限制在特定目录中:

<?php

$fname=$_SERVER['DOCUMENT_ROOT'] . "/pages/" . basename($_GET['p']) . ".php";
include($fname);

答案 1 :(得分:0)

您正在尝试创建一个动态网站,该网站的GET参数控制向用户显示的内容,这是可以完成的操作:

<?php if( in_array($_GET['P'],['home','coolpage']) ): ?>
<?php include('header1.html'); ?>

<title>Cool Page</title>
<?php include('header2.html'); ?>
<?php endif; ?>

<?php if($_GET['P']=='home'): ?>
This is page 1, the home page.
<?php elseif($_GET['P']=='coolpage'): ?>
Foo page
<?php endif; ?>

<?php if( in_array($_GET['P'],['home','coolpage']) ): ?>
<?php include('footer.html'); ?>
<?php endif; ?>

/?P = home输出:

header1.html
<title>Cool Page</title>
header2.html
This is page 1, the home page.

footer.html

/?P = foo输出:

header1.html
<title>Cool Page</title>
header2.html
Foo page

footer.html

/?P = IAmNotAPage输出:

(only a few newlines are output)

此解决方案适用于小型项目,不建议用于大型项目,尽管它很容易以复杂的意大利面条代码结尾。

如果按如下所示设计应用程序,则该应用程序是绝对安全的,其中外部文件的路径是硬编码的。只是在包含文件时不要使用环境变量(错误代码:<?php include("html/{$_GET['P']}.html");),因为它会 使应用程序容易受到攻击(如symcbean所指出的那样)。

此答案为您的问题提供了安全的解决方案,请考虑使其成为可接受的答案。

答案 2 :(得分:-2)

您似乎在问如何根据URL参数动态显示页面。

PHP脚本

脚本使用GET方法获取URL参数,将参数分配给文件路径,然后使用设置的路径显示文件。

该路径将查看包含文件夹中的存储页面。如果找不到该文件,则会创建一个新文件,其文本为“此文件中有32个字节!”。

<?php
$including_url = "includes/" . basename($_GET["p"], ".php") . ".php";

if (file_exists($including_url) {
    require $including_url;
} else {
    $new_file = fopen($including_url, "w") or die("nonexistent file could not be created");
    fwrite($new_file, "There are 32 bytes in this file!");
    fclose($new_file);
    require $including_url
}
?>