我有一个PHP驱动的CMS网站.我想要包含database.php在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';
?>
Run Code Online (Sandbox Code Playgroud)
运行脚本,我收到此消息:
/应用/ XAMPP/xamppfiles/htdocs中/ tslocal/textbook_scripts
没有直接的脚本访问.
在第一行database.php是这一行:
<?php defined('SYSPATH') or die('No direct script access.');
Run Code Online (Sandbox Code Playgroud)
我猜这个CMS已经以某种方式"保护"了配置文件,这阻止了我将其包含在内.什么是"无直接脚本访问"?谷歌为我提供了许多寻求添加此功能的人的例子.我希望将其删除.可能?可能性有多大?我怎么告诉PHP让我访问database.php?
解决这个问题的基本方法是在应用程序的某个地方(在加载database.php之前),有一条线路:
define( 'APPLICATION_LOADED', true );
Run Code Online (Sandbox Code Playgroud)
在database.php中有一个针对此执行的检查,类似于:
if( !defined('APPLICATION_LOADED') || !APPLICATION_LOADED ) {
die( 'No direct script access.' );
}
Run Code Online (Sandbox Code Playgroud)
查看database.php及其包含的任何文件,以确定它是如何检查脚本是否被直接访问.然后,如果要在脚本中包含该文件,则可以模拟必要的条件.
我从 Codeigniter 的 Email.php 类 CI_Email 中收到此 PHP 错误:
<?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
}
Run Code Online (Sandbox Code Playgroud)
我所做的就是尝试像这样直接包含这个类:
<?php
include("Email.php");
?>
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它说:
No direct script access.
Run Code Online (Sandbox Code Playgroud)
PHP方法“define”检查给定常量是否存在且已定义。
因此,对于我的特定课程,它表示必须定义 BASEPATH。所以如果你这样定义它:
<?php
define('BASEPATH', "foobar");
include("Email.php");
?>
Run Code Online (Sandbox Code Playgroud)
然后就不再抛出错误了。但接下来我们不得不想知道为什么开发人员会设置这个特定的限制,以及如果我们绕过它会发生什么。
| 归档时间: |
|
| 查看次数: |
25789 次 |
| 最近记录: |