如果有警告消息,请显示不同的内容

时间:2013-03-29 17:51:36

标签: php html include warnings

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

先谢谢你,祝复活节快乐!

5 个答案:

答案 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
}