我有一个PHP支持的CMS网站。我想在PHP脚本中包含database.php
。 database.php位于config文件夹中,并具有数据库连接详细信息(pass,db_name等)。
这是脚本:
<?php
echo __DIR__ ."<br /><br />";
//make sure your assumptions on directories and path are correct for the
//include below
include '../application/config/database.php';
?>
运行脚本,我收到此消息:
/应用/ XAMPP / xamppfiles / htdocs中/ tslocal / textbook_scripts
无法直接访问脚本。
database.php
的第一行是这一行:
<?php defined('SYSPATH') or die('No direct script access.');
我猜这个CMS已经以某种方式“保护”了配置文件,这阻止了我将其包含在内。什么是“无直接脚本访问”?谷歌为我提供了许多寻求添加此功能的人的例子。我希望将其删除。可能?可能性有多大?我怎么告诉PHP让我访问database.php?
答案 0 :(得分:6)
解决这个问题的基本方法是在应用程序的某个地方(在加载database.php之前),有一行代码:
define( 'APPLICATION_LOADED', true );
在database.php中,对此执行检查,类似于:
if( !defined('APPLICATION_LOADED') || !APPLICATION_LOADED ) {
die( 'No direct script access.' );
}
查看database.php及其包含的任何文件,以确定它是如何检查脚本是否被直接访问。然后,如果要在脚本中包含该文件,则可以模仿必要的条件。
答案 1 :(得分:2)
我从Codeigniter的Email.php类中得到了这个PHP错误,名为CI_Email:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class CI_Email {
var $smtp_default_from = '';
var $smtp_default_name = '';
var $useragent = "CodeIgniter";
var $mailpath = "/usr/sbin/sendmail";
//more code omitted
}
我所做的是尝试直接包含这个类:
<?php
include("Email.php");
?>
当我运行它时,它说:
No direct script access.
PHP method "defined"检查给定常量是否存在并定义。
所以对于我的特定类,它说必须定义BASEPATH。所以,如果你这样定义:
<?php
define('BASEPATH', "foobar");
include("Email.php");
?>
然后不再抛出错误。但是,我们不得不想知道为什么开发人员会采取这种特殊限制,如果我们绕过它会发生什么。