2013-03-22 84 views
0

我有這樣的結構要求在CodeIgniter子文件夾中有一個類?

controllers 
- base.php 
\ subfolder 
    - home.php 
home.php

我想打電話給

require("../base.php") 

,但它給了我一個錯誤消息,說該文件沒有被發現。在同一個文件夾上工作。

有沒有辦法讓它在子文件夾上工作?

+0

Linux或windows? – Jordan 2013-03-22 20:09:45

+0

我在Windows上測試,但我會部署到Linux服務器 – BrunoLM 2013-03-22 20:10:29

+0

運行在Linux或Windows代碼? – Cooper 2013-03-22 20:10:42

回答

1

CodeIgniter從index.php腳本內執行,並且require函數的路徑基於index.php路徑解析。例如,如果您將test.php放在CodeIgniter根文件夾中,然後從控制器撥打require './test.php',那麼將包含test.php而不會出現問題。

要回答這個問題,我們需要php magic常量__DIR__,它總是設置爲當前腳本文件夾。答案是:

require __DIR__."/../base.php"; 

home.php內部調用。

編輯:與平臺無關的解決辦法是:

require __DIR__.DIRECTORY_SEPARATOR."..".DIRECTORY_SEPARATOR."base.php"; 
1

嘗試:

require("/<full dir path>/base.php"); 

另一個祕訣 - 有時在窗口(如果您打算在Linux上部署沒有幫助)是有時你必須逃離「\\」使用雙斜線。

如果這不起作用,這可能是一個權限問題。

編輯:使用此獲得include路徑:

echo ini_get('include_path'); 

,將告訴你要使用的路徑。

+0

工作,但爲什麼我不能使用相對路徑? – BrunoLM 2013-03-22 20:16:58

+0

問題是PHP中的路徑總是相對於第一個文件路徑,在這種情況下是home.php。所以你必須包含目錄'控制器'。儘管取決於PHP和/或服務器上的配置。 – Jordan 2013-03-22 20:23:33

+0

@BrunoLM不要忘記爲你選擇一個答案的問題;)快樂星期五! – Jordan 2013-03-22 20:31:56

2

你可以嘗試使用完整路徑:

$origin = $_SERVER['DOCUMENT_ROOT']; 
$home = $origin. "/controllers/home.php"; 
require($home); 

但我明白,這是在屁股在長期痛苦,但它是一個解決方案。我從來沒有像以前那樣的問題。

但也許這可能是更多的幫助? PHP include file. Showing error file not found

+1

這個解決方案很好,可以在配置之間移植。 – Jordan 2013-03-22 20:26:51

0

在撰寫本文時,接受的答案是正確的在require(以及類似功能)路徑基於index.php文件的位置。但是,CodeIgniter在index.php中定義了非常有用的常量,它允許您創建應用程序各個部分的路徑。

APPPATH常數對於指向控制器/庫/等是完美的。

require APPPATH . 'controllers/base.php'; 

一個更好的解決辦法是創建的application/core/MY_Controller.php形式的基本控制器。然後,您可以使用MY_Controller來擴展您的控制器,而不需要任何文件。 Check out Phil's article about Base Controllers.

相關問題