2013-08-22 63 views
4

我有一個PHP驅動的CMS網站。我想將database.php包含在PHP腳本中。 database.php位於config文件夾中,並具有db連接的詳細信息(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

您可以添加'../ application/config/database.php'的代碼嗎?毫無疑問,有些東西會檢查你沒有在PHP中設置的變量。 – andrewsi

+0

你可以在database.php中的「無直接腳本訪問」行上做Ctrl + F,並向我們顯示相關的代碼? – IanPudney

+0

@andrewsi完成。不知道什麼syspath是 –

回答

5

對於要對這個基本的方法是在應用程序(database.php中的加載之前)的地方有一條線沿東西的線路:

define('APPLICATION_LOADED', true); 

在database.php中有針對此進行檢查,類似於:

if(!defined('APPLICATION_LOADED') || !APPLICATION_LOADED) { 
    die('No direct script access.'); 
} 

查找範圍database.php文件和文件無論它包括以確定它是如何檢查是否腳本被直接訪問或沒有。然後,如果您想將該文件包含在腳本中,則可以模擬所需的條件。

+0

感謝您的答案,在database.php中是「<?php defined('SYSPATH')或者die('No direct script access。'); 」。我不確定我需要在這裏採取什麼行動? –

+1

@Doug你應該找出正在設置'SYSPATH'的項目,理想的設置爲相同的值(或者使用CMS的引導文件,如果有的話)。它可能具有的功能不僅僅是包含腳本的安全措施。 –

+1

@Doug理想情況下,如果您想要添加到項目中,那麼可能需要一組預定義的步驟來引導應用程序(包括某個文件,調用某個函數等)。深入瞭解一些現有代碼,以查看這些文件如何設置環境。 –

1

我從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. 

The PHP method "defined"檢查給定的常量是否存在並被定義。

因此,對於我的特定類,它說BASEPATH必須定義。所以如果你這樣定義它:

<?php 
    define('BASEPATH', "foobar"); 
    include("Email.php"); 
?> 

然後錯誤不再被拋出。但是,我們不得不想知道爲什麼開發人員會放入這個特定的限制,如果我們繞過它會發生什麼。

相關問題