2013-03-29 70 views
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找不到」)

在此先感謝和快樂的復活節!

回答

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,除非你要使用乾淨的網址(如/ news,/ f aq,/ 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 
} 
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 –