2012-05-14 20 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);そして定数が定義されているかどうかをチェックするために正しい関数を使用する:'!(!REALLY_INCLUDED ')||!REALLY_INCLUDED){... ' –

+0

別のインクルードファイルでインクルードされているインクルードファイルがある場合はどうなりますか?そして最初のものはJavascriptによって呼び出されますか?最初のものは定数を定義することはできず、定数が同時に設定されているかどうかを確認することはできません。それは動作しません。 @endreasErikssonの回答 –

9

いくつかの選択肢があります。

  1. 定数変数が/設定されている場合、それは彼らに
  2. テストを提供することを拒否してWebサーバを設定し
  3. (そう、彼らは自動的に自分自身のURIを得ることはありません)ウェブルート外のファイルを保持し、それを含むことが許可されているすべてのファイルに設定します。 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経由で呼び出されるため、インクルードされたファイルに変数や定数を適用することは難しいかもしれません(難しいかもしれません)。 –

関連する問題