2016-04-26 3 views
0

У меня есть эта папка-структура:Как включить скрипт из вложенных папок?

-out 
    -DBconnection.php 
-root 
    -application 
     -contact.php 

Кроме того, здесь есть содержание contact.php:

function index(){ 
    <form action="http://example.com/localhost/application/contact/check"> 
     // some code here ... 
    </form> 
} 

function check(){ 
    // I need to include DBconnection.php script here 
    require_once(/* what path */); 
    ... 
} 

Но этот путь не работает: ../../out/DBconnection.php.

Примечание: Путь выше работает в index() Функция также. Однако index() определяется по умолчанию в моей системе маршрутизации и когда я открываю этот путь

http://example.com/contact 
/* which is the same as 
    http://example.com/contact/index 
*/ 

Тогда index будет выполнена. Итак, как я могу включить DBconnection.php в функцию check()?

+0

Не должно быть '../../ out/DBconnection.php'? –

+0

@AlonEitan Извините, я пропустил 'out' в указанном пути. Я редактировал. – stack

ответ

1

Что делать в таких случаях, как это добавить в самой верхней части корневого файла следующие строки:

define('DS',  DIRECTORY_SEPARATOR); 
define('ROOT',  dirname(dirname(dirname(__FILE__)))); // Root is ../../ 

И когда я включаю файл, я использую эти константы, чтобы получить путь (который всегда по отношению к радужному документу):

require ROOT . DS . "out" . DS . "DBconnection.php"; 
+0

Просто скажите, пожалуйста, есть ли альтернатива? 'Имя_директории (имя_директории (имя_директории (__ FILE __)))'. На самом деле я не могу использовать '../../../' вместо этого. – stack

+0

Спасибо! Но я не уверен, что вы имеете в виду. Можете ли вы подробно рассказать? –

+0

http://stackoverflow.com/questions/36877297/can-i-use-dot-and-backslash-instead-of-dirname – stack

0

пытаются использовать: ../../out/DBconnection.php

+0

Извините, я пропустил 'out' в указанном пути. Я отредактировал его. – stack

+0

вернуться назад другой каталог: ../../../out/DBconnection.php – mgrantnz

+0

Я протестировал. Все еще не работает. – stack

0

Вы должны иметь следующую структуру:

DIR1 
    out 
     DBconnection.php 
    root 
     application 
      contact.php 

Таким образом, внутри contact.php, чтобы иметь возможность использовать DBconnection.php, вы должны идти 3 директории. Правильный способ сделать это: ../../out/DBconnection.php.

+0

Я проверил .. не работает. – stack

0

Это действительно зависит от того, что находится в вашем пути include, и где ваше приложение загружается.

Если вы используете относительные пути (которые у вас есть, с ../), вам нужно понять, что только потому, что он выглядит относительно файла, над которым вы работаете, этого может и не быть. Это относительно файла, в который вы вошли.

Чтобы обойти эту проблему, вы должны быть в состоянии использовать что-то вроде

include_once(dirname(__FILE__) . '/../../out/DBConnection.php');

Однако, что вы действительно должны делать это положить ваш путь к приложению в вашем пути поиска. Таким образом, вы будете в состоянии сделать:

include_once('out/DBConnection.php');

И вы будете в состоянии сделать это где-нибудь в вашем приложении!

+0

Я проверил ваш первый подход. Это не работает. – stack

+0

Ах. Возможно, я пропустил «../». Тем не менее, я бы действительно посмотрел на изменение пути включения, используя 'set_include_path (get_include_path(). PATH_SEPARATOR. '/ Path/to/your/enclosing/folder')', если вы хотите сделать это более удобным для обслуживания в будущем. – Ben

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