2013-03-29 4 views
0

У меня есть небольшая проблема с предупреждением PHP:Показать diffrent содержимое, если есть предупреждающее сообщение

Я в принципе хочу изменить содержание моей страницы, нажав на ссылки, например:

<?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 не найдено»)

Спасибо заранее и счастливы!

ответ

1

Вы можете сделать

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

Источник: PHP Manual

+0

спасибо! Это именно то, что я искал :) – muffin

0

Вы можете проверить, есть ли file exists(), а затем добавить пользовательский шаблон 404.

<?php 
if (file_exists($page + '.html')) { 
    include ($page + '.html') 
} else { 
    include ('404.html'); 
} 
?> 
0

Идея заключается в том, чтобы проверить, существует ли файл, прежде чем пытаться включить() это:

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

include("$page.html"); 
0

Да это возможно, хотя я бы рекомендовал отправить 404, если вы не собираетесь использовать чистый URL (например,/news,/f aq,/contact), которые перенаправляются за кулисами в index.php, записывая параметр страницы. Это потому, что index.php действительно существует, у вас просто плохой параметр. Таким образом, 404 не подходит. Это не означает, что вы действительно можете: t установить заголовок 404 в этом месте, так как вы уже отправили вывод в браузер.

Для вас дело просто настроить условное ли в file_exists и читается так:

$include_file = $page . '.html'; 
if (file_exists($include_file) && is_readable($include_file)) { 
    include($include_file); 
} else { 
    // show error message 
} 
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'); 
} 

Вы также можете сгенерировать меню с помощью этого массива.

+0

Белый список - хорошая идея. Это не позволит кому-то потребовать страницы, которые могут вызвать проблемы с безопасностью. – Jocelyn

+0

Это очень верно. +1 –

Смежные вопросы