2015-09-08 44 views
-1

我遇到include/require命令的問題。include不起作用

的文件結構如下所示:

private | 
     - config.php 
     - dbc.php 
public | 
     - index.php 
     - includes | 
        - database.php 

這裏是在配置文件中更好地理解 http://i.stack.imgur.com/iHm5C.png

像我有這樣的:

<?php 
    $dbname = "Prehlad_oop"; 
    $dbuser = "lifestype_oop"; 
    $dbpass = "fwoop"; 
    $dbhost = "localhost"; 
    ?> 

在dbc.php我有此:

public function c(){ 
include "config.php"; 
$this->conn = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 
.... other code 

和database.php中:

require '../private/dbc.php'; 
$conn = new connection; 
$conn->c(); 

當我從dbc.php加載它,但是,如果我從database.php中加載頁面這個事情是工作,這是行不通的,我說:已經在dbc.php

不確定的變量,我發現一種方法,使此代碼的工作,甚至當我打電話,如果從database.php中,加入

../private/ 
在dbc.php

...最終代碼看起來像這樣:

public function c(){ 
include "../private/config.php"; 

我的問題是,爲什麼我需要在目錄路徑,當我想包括的文件是在同一目錄(config.php和dbc.php)。只有當我從database.php調用函數時纔會出現此錯誤。當我在包含文件中包含文件時是否有一些障礙? ty的答案:-)

+4

include/require使用相對路徑搜索相對於php.ini'include_path'指令中列出的條目,該條目通常包括當前工作目錄。因此,它們與__current工作目錄_相關,不一定與包含文件的目錄位於相同的位置....理解這一點,並且您將理解包括......這是許多PHP開發人員從未完全理解的東西 –

回答

2

總是使用文件的絕對路徑包括。 e.g

include $_SERVER['DOCUMENT_ROOT']."config.php"; 

相反config.php文件的相對路徑。

包含所有文件及其絕對路徑。 正如裏格的

建議您可以使用__DIR__(這是一個更好的選擇)

所以,你可以在網上項目樹中隨意移動腳本沒有變化。

+0

您會更好地使用'__DIR__',這樣如果/當站點被移動到測試環境中'documentroot'文件夾的一個子文件夾時,它將繼續工作,其中'DOCUMENT_ROOT'不會 – RiggsFolly

+0

那麼我會輸入什麼? – JosefPP

+0

需要__DIR__。 「config.php文件」; ???或者我必須以某種方式定義__DIR__? – JosefPP

0

可以包含'./private/config.php';或者包含'private/config.php',第一個版本查找相對於當前工作目錄的文件,第二個版本使用包含路徑。

PS:最好使用require_once或include_once,以避免包括相同的功能/類定義多次,這將casuse問題(重新聲明函數)

0

Mangesh的回答是不錯的(我upvoted),但我建議這個在我看來,稍微好一點的選擇:

<?php 
require_once(realpath($_SERVER['DOCUMENT_ROOT']) . '/project_folder/file.php'); 
?> 

我發現這工作得更好,換句話說,更一致地web服務器,因爲realpath返回規範化的絕對​​路徑,而這正是我們常常有,我們不?

說明:真實路徑將剝去其路徑參數的任何尾隨斜線,所以一定要有一個前導斜線後的功能(該projeft_folder之前,在這種情況下)。

在任何情況下,您都可以在所有項目文件中使用require/include格式,並且它可以工作。遠離相對路徑,他們很麻煩。

相關問題