2012-05-14 44 views
1

我的網站的主文件(的index.php)的代碼是在這裏:如何防止用戶看到「包含文件」?

<?php 
include 'header.php'; 
include 'sidebar.php'; 
include 'content.php'; 
include 'footer.php'; 
?> 

但我不希望任何用戶看到這些文件包括寫「www.domain.com/header.php」。我應該在這些文件中插入一個php代碼還是可能的?

回答

2

您可以在主文件中定義一個常量,並用它在你的包含文件DETEC它們是否真的包括或不包括:

的index.php

<?php 
define('REALLY_INCLUDED', true); 
include'header.php'; 

的header.php

<?php 
if(!defined('REALLY_INCLUDED') || !REALLY_INCLUDED) { 
    exit(); 
} 
... 
+0

...然後你忘記常量在某處並暴露該文件。 「哎呀呀」。如果你想要一些保密的東西,不要把它放在文檔的根目錄中。 –

+0

這會引發一些不必要的警告。在定義期間添加引號:'define('REALLY_INCLUDED',true);'並使用正確的函數來檢查常量是否被定義:'if(!defined('REALLY_INCLUDED')||!REALLY_INCLUDED){...' –

+0

如果在另一個包含文件中調用了包含文件,該怎麼辦?第一個被Javascript調用?第一個不能定義這個常量,並檢查這個常量是否已經同時被設置。它不會工作。我建議@AndreasEriksson的回答爲 –

9

您有幾種選擇。

  1. 保持文件的根目錄以外(所以他們不會自動獲得自己的URI)
  2. 配置你的服務器,因此拒絕某個變量/常數設置爲他們服務
  3. 測試,並然後將其設置在允許包含它們的每個文件中。如果沒有設置,則爲exit
+0

+1,用於將所有這些文件從webroot中移出。 – Arkh

7

這裏有一個PHP給你。

if(basename(__FILE__) == basename($_SERVER['PHP_SELF'])){exit();} 

總之,如果調用文件本身就退出執行。

消息來源:http://thephpcode.blogspot.se/2009/07/creating-include-only-php-files.html

+1

不錯的工作,男人。在我看來,這是一個完美的答案。有時,將變量或常量應用於包含的文件是不可能的(也許很難),因爲它們是通過AJAX調用的 –

相關問題