我有這樣的結構要求在CodeIgniter子文件夾中有一個類?
controllers
- base.php
\ subfolder
- home.php
在
home.php
我想打電話給
require("../base.php")
,但它給了我一個錯誤消息,說該文件沒有被發現。在同一個文件夾上工作。
有沒有辦法讓它在子文件夾上工作?
我有這樣的結構要求在CodeIgniter子文件夾中有一個類?
controllers
- base.php
\ subfolder
- home.php
在
home.php
我想打電話給
require("../base.php")
,但它給了我一個錯誤消息,說該文件沒有被發現。在同一個文件夾上工作。
有沒有辦法讓它在子文件夾上工作?
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";
嘗試:
require("/<full dir path>/base.php");
另一個祕訣 - 有時在窗口(如果您打算在Linux上部署沒有幫助)是有時你必須逃離「\\」使用雙斜線。
如果這不起作用,這可能是一個權限問題。
編輯:使用此獲得include路徑:
echo ini_get('include_path');
,將告訴你要使用的路徑。
你可以嘗試使用完整路徑:
$origin = $_SERVER['DOCUMENT_ROOT'];
$home = $origin. "/controllers/home.php";
require($home);
但我明白,這是在屁股在長期痛苦,但它是一個解決方案。我從來沒有像以前那樣的問題。
但也許這可能是更多的幫助? PHP include file. Showing error file not found
這個解決方案很好,可以在配置之間移植。 – Jordan 2013-03-22 20:26:51
在撰寫本文時,接受的答案是正確的在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.
Linux或windows? – Jordan 2013-03-22 20:09:45
我在Windows上測試,但我會部署到Linux服務器 – BrunoLM 2013-03-22 20:10:29
運行在Linux或Windows代碼? – Cooper 2013-03-22 20:10:42