我正在尝试使用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来获得一个名为“酷页面”的页面(如果可用!),但是我不知道它是如何工作的。
感谢您提供的任何帮助!
答案 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参数动态显示页面。
脚本使用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
}
?>