我有一个PHP警告的问题:
我基本上想通过点击链接来改变我的页面内容,如下所示:
<?php $page = ((!empty($_GET['page'])) ? $_GET['page'] : 'home'); ?>
<h1>Pages:</h1>
<ul>
<li><a href="index.php?page=news">News</a></li>
<li><a href="index.php?page=faq">F.A.Q.</a></li>
<li><a href="index.php?page=contact">Contact</a></li>
</ul>
<?php include("$page.html");?>
这很好用,但是当我使用不存在的页面时,例如
localhost/dir/index.php?page=notapage
我收到以下错误:
Warning: include(notapage.html): failed to open stream: No such file or directory in
C:\xampp\htdocs\dir\index.php on line 8
Warning: include(): Failed opening 'notapage.html' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\dir\index.php on line 8
是否可以通过自定义消息替换此警告? (如“未找到404”)
先谢谢你,祝复活节快乐!
答案 0 :(得分:3)
您可以使用file_exists(),但请记住,您的方法不是很安全。 更安全的方法是使用具有允许页面的数组。这样您就可以更好地控制用户输入。像这样:
$pages = array(
'news' => 'News',
'faq' => 'F.A.Q.',
'contact' => 'Contact'
);
if (!empty($pages[$_GET['page']])) {
include($_GET['page'].'html');
} else {
include('error404.html');
}
您也可以使用该数组生成菜单。
答案 1 :(得分:1)
你可以做到
if (file_exists($page.html)) {
include("$page.html");
}
else
{
echo "404 Message";
}
来源:PHP Manual
答案 2 :(得分:0)
您可以检查file exists()是否包含自定义404模板。
<?php
if (file_exists($page + '.html')) {
include ($page + '.html')
} else {
include ('404.html');
}
?>
答案 3 :(得分:0)
想法是在尝试包含()之前检查文件是否存在:
if(!file_exists("$page.html"))
{
display_error404();
exit;
}
include("$page.html");
答案 4 :(得分:0)
是的,这是可能的,虽然我建议发送一个404,除非你打算使用干净的网址(比如/ news,/ faq,/ contact)在幕后重定向到index.php,写一个page参数。这是因为index.php确实存在,你只是有一个错误的参数。因此404不合适。这并不是说你实际上可以在这个位置设置一个404标题,因为你已经将输出发送到了浏览器。
对于你的情况,只需设置一个条件是file_exists是否可读,如下所示:
$include_file = $page . '.html';
if (file_exists($include_file) && is_readable($include_file)) {
include($include_file);
} else {
// show error message
}