0

我有一个 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 未找到”)

提前致谢,复活节快乐!

4

5 回答 5

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');
}

您还可以使用该数组生成菜单。

于 2013-03-29T18:02:46.117 回答
1

你可以做

if (file_exists($page.html)) {
include("$page.html");
}
else
{
echo "404 Message";
}

来源:PHP 手册

于 2013-03-29T17:56:24.660 回答
0

您可以检查文件是否存在(),然后包含自定义 404 模板。

<?php 
if (file_exists($page + '.html')) { 
    include ($page + '.html') 
} else { 
    include ('404.html'); 
}
?>
于 2013-03-29T17:55:53.740 回答
0

这个想法是在尝试 include() 之前检查文件是否存在:

if(!file_exists("$page.html"))
{
    display_error404();
    exit;
}

include("$page.html");
于 2013-03-29T17:57:37.343 回答
0

是的,这是可能的,但我建议发送 404,除非您还打算使用干净的 url(如 /news、/faq、/contact)在后台重定向到 index.php,并写入页面参数。这是因为 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
}
于 2013-03-29T17:59:07.020 回答