2016-10-22 7 views
1

私のプロジェクトでは、PHPのファイルが認証をチェックします。異なるパスの深さからのリダイレクト

$ PROJECT_ROOT/libに/のfunctions.php:ユーザーが認証されており、そうでない場合、それは$ PROJECT_ROOT/login.phpページにリダイレクトするかどうかを

<?php 
check_authentication(); 

function check_authentication(){ 
     if (session_status() == PHP_SESSION_NONE) { 
      session_start(); 
     } 

     if(defined('authorized') && authorized){ 
       if(!(isset($_SESSION['admin'] && $_SESSION['admin']))){ 
        header('Location: login.php'); 
        exit(0); 
       } 
     } 
} 

check_authentication機能をチェックします。ファイル$ PROJECT_ROOT/reader.phpで

<?php 
define('authorized',TRUE); 

require_once('lib/functions.php'); 

これはOKの作品!

ただし、ファイル$ PROJECT_ROOT /モジュール/ text.php中:それは$のPROJECT_ROOTディレクトリ内に位置していないあるので、これは正しくリダイレ​​クトされていません

<?php 
define('authorized',TRUE); 

require_once('../lib/functions.php'); 

this question「functions.php」のURIフォルダを取得できないと私は理解します。

この問題を解決するにはどうすればよいですか?

明らかに私は絶対パスでリダイレクトしようとすることができますが、これは私のプロジェクトの移植性を損なうでしょう。

答えて

0

問題は、PHPを使用して$ PROJECT_ROOT URLを簡単に参照できないことです。

define(PROJECT_URL, 
     '//'.$_SERVER['HTTP_HOST']. 
     substr(dirname(__DIR__), strlen($_SERVER['DOCUMENT_ROOT'])) 
); 

開始:何が必要です

は$ _SERVER [ 'DOCUMENT_ROOT']

これは$ PROJECT_ROOT/libに/のfunctions.phpで達成することができるのプロジェクトURL抽象化相対を作成することです'//'はhttp/httpsプロトコル抽象化を作成します。

上記URLは、これらの要素から構成されている:

echo __DIR__; // /var/www/html/project_x/service/lib (current script directory) 
echo '<br>'; 
echo dirname(__DIR__); // /var/www/html/project_x/service (the data model root directory in this case) 
echo '<br>'; 
echo $_SERVER['DOCUMENT_ROOT']; // /var/www/html (prefix that need to be removed) 
echo '<br>'; 
echo PROJECT_URL; // //localhost/project_x/service 

リダイレクトは今絶対URLと

header('Location: '.PROJECT_URL.'/login.php'); 
を発生します
関連する問題