在我的项目中,PHP中的文件检查身份验证。
$ PROJECT_ROOT / lib / functions.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 / login.php页面。
在文件$ PROJECT_ROOT / reader.php中:
<?php
define('authorized',TRUE);
require_once('lib/functions.php');
这很好用!
但是在文件$ PROJECT_ROOT / modules / text.php中:
<?php
define('authorized',TRUE);
require_once('../lib/functions.php');
这不能正确重定向,因为它在$ PROJECT_ROOT目录中找不到。
从this question我明白无法获取&#34; functions.php&#34;的URI文件夹。
但是我该怎么做才能解决这个问题呢?
显然我可以尝试使用绝对路径重定向,但这会损害我项目的可移植性。
答案 0 :(得分:0)
问题是无法通过PHP轻松引用$ PROJECT_ROOT URL。
所需要的是创建相对于$ _SERVER的项目URL抽象[&#39; DOCUMENT_ROOT&#39;]
这可以在$ PROJECT_ROOT / lib / functions.php中实现:
define(PROJECT_URL,
'//'.$_SERVER['HTTP_HOST'].
substr(dirname(__DIR__), strlen($_SERVER['DOCUMENT_ROOT']))
);
首发&#39; //&#39;创建http / https协议抽象。
以上网址由以下元素构成:
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');