2013-03-22 2 views
0

Я имею такую ​​структуруТребовать класс в подпапке CodeIgniter?

controllers 
- base.php 
\ subfolder 
    - home.php 

в home.php Я хочу назвать

require("../base.php") 

, но это дает мне сообщение об ошибке, говорящее файл не был найден. В той же папке она работает.

Есть ли способ заставить его работать с подпапкой?

+0

Linux или windows? – Jordan

+0

Я тестирую Windows, но я буду развертывать на сервере Linux – BrunoLM

+0

запускать код в linux или windows? – Cooper

ответ

1

CodeIgniter выполняется внутри index.php сценария и пути require функции разрешаются на основе index.php пути. Например, если вы поместите test.php в корневую папку CodeIgniter, а затем вы вызовете require './test.php' с вашего контроллера, тогда test.php будет включен без проблем.

Чтобы ответить на вопрос, нам нужна константа php magic __DIR__, которая всегда установлена ​​в текущую папку сценариев. Ответ:

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

звонок изнутри home.php.

Edit: И независимо от платформы решения было бы:

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

Try:

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

Еще один совет - иногда в окнах (не полезно, если вы планируете развернуть на Linux) иногда вам придется бежать «\\», используя двойные слеши.

Если это не работает, возможно, это проблема с разрешениями.

Edit: использовать это, чтобы получить ваш путь включают:

echo ini_get('include_path'); 

Это покажет вам, какой путь использовать.

+0

, который работает, но почему я не могу использовать относительный путь? – BrunoLM

+0

Проблема в том, что пути в PHP всегда относятся к первому пути к файлу, в данном случае home.php. Поэтому вам нужно включить контроллеры dir. Тем не менее, зависит от конфигурации на PHP и/или на сервере. – Jordan

+0

@BrunoLM Не забудьте выбрать ответ на свой вопрос;) Счастливая пятница! – Jordan

2

Вы можете попробовать использовать полный путь:

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

Но я понимаю, что это боль в заднице в течение длительного срока, но это решение. Раньше у меня никогда не было такой проблемы.

Возможно, это может быть более полезным? PHP include file. Showing error file not found

+1

Это решение хорошо и переносится между конфигурациями. – Jordan

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.

Смежные вопросы