Как включить файл с относительным путем "вверх" - PullRequest
2 голосов
/ 06 июля 2010

Я пытаюсь включить простой скрипт, подобный следующему:

ini_set('include_path', ini_get('include_path').':'.dirname(__FILE__));
include('../configuration/live/database.php');

Когда я запускаю скрипт (с помощью sudo), PHP возвращает:

Предупреждение PHP: include (../configuration/live/database.php): не удалось открыть поток: нет такого файла или каталога в /home/adil/workspace-netbeans/trunk/applications/dudu/scripts/ejabberd_populate.php в строке 17

Для пояснения, database.php существует в

/ home / adil / workspace-netbeans / trunk / Applications / dudu / configuration / live / database.php

В моем сценарии dirname (__ FILE__) возвращает

/ home / adil / workspace-netbeans / trunk / Applications / dudu / scripts

Следовательно, следующие работы:

include(dirname(__FILE__).'/../configuration/live/database.php')

Что я пытаюсь понять, почему мой код (с include_path) не работает?Есть ли способ узнать, как искать включаемые файлы в include_path?

Этот же скрипт отлично работает на нашем производственном сервере.Он следует той же файловой иерархии.

Примечание. Самое простое решение - определить 'SITE_ROOT' и добавить в него включения, но это не причина для этого поста.Я хочу знать, почему вышеперечисленное не работает.

PS: я использую PHP 5.3.2 в Ubuntu 10.04

Ответы [ 4 ]

2 голосов
/ 07 июля 2010

Хорошо.Я наконец-то нашел проблему.

Я запускал скрипт через оболочку, и оказалось, ваш относительный путь включает в себя работы, основанные на вашем текущем каталоге (pwd) в оболочке .

Итак, этот код:

sudo php workspace-netbeans/trunk/applications/dudu/scripts/ejabberd_populate.php 

не работал, потому что мой pwd в оболочке был моим домом, и путь оттуда не определялся.Но это

cd workspace-netbeans/trunk/applications/dudu/scripts/
sudo php ejabberd_populate.php 

работает.

Я не уверен, почему include_path не работал.

Спасибо всем, особенно.Полковник Шрапнель, за помощь в решении этого, казалось бы, глупого вопроса.

1 голос
/ 06 июля 2010

Приведенные выше ответы отходят от реального вопроса.

Ради кого-то, имеющего подобную проблему, вот немедленное решение:

require(dirname(__FILE__)."/../configuration/live/master.php");

В PHP 5.3 вы также можете сделать

require(__DIR__."/../configuration/live/master.php");
1 голос
/ 06 июля 2010

Не работает, потому что файл не существует по этому пути.

0 голосов
/ 06 июля 2010

Вы можете сделать:

require( dirname( dirname(__FILE__) ).'/configuration/live/master.php' );

Если вам нужно пойти «глубже» вверх, просто добавьте больше dirname ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...