PHP требует реального пути - требуется неудачное открытие

Я пытаюсь require/include файл по относительному пути. Пути существуют и все права проверены. Сценарий, который необходимо включить, доступен для чтения, и к нему можно получить доступ через URL-адрес в браузере...

Однако я получаю сообщения об ошибках/предупреждениях о том, что его не удалось открыть. И вызывающий сценарий, и файл, который нужно включить, находятся на одном сервере.

Родственник звонившего:

/devel/phi/dev/appcenter-head/appcenter/application/nm/index.php

Местоположение звонящего:

/home/devel/wwwroot/phi/dev/appcenter-head/appcenter/application/nm

Требуется родственник:

/devel/nm/dev/http-api/http-api/src/httpapi.inc.php

Требуется местоположение:

/home/devel/wwwroot/nm/dev/http-api/http-api/src

Что я пробовал:

$strHttpApiUrl = "/devel/nm/dev/http-api/http-api/index.php";
$strFile = "/src/httpapi.inc.php";
$strDirName = dirname( $strHttpApiUrl );
$strRealpath = realpath( $strDirName . $strFile );
require_once $strRealpath;

Ошибка с: PHP Warning: require_once(/home/devel/wwwroot/phi/dev/appcenter-head/appcenter/application/nm) [<a href='function.require-once'>functio n.require-once</a>]: failed to open stream: No such file or directory in /home/devel/wwwroot/phi/dev/appcenter-head/appcenter/application/nm/class/TWinLogin.php

Также не работает с: PHP Fatal error: require_once() [<a href='function.require'>function.require</a>]: Failed opening required '' (include_path='.:/opt/nm/appcenter40-server-php53/lib/php')

Также попробовал просто включить URL-адрес строки или использовать абсолютный путь...

Как включить этот файл?


ИЗМЕНИТЬ:

Это успешно включает файл:

require_once '/home/devel/wwwroot/nm/dev/http-api/http-api/src/httpapi.inc.php';

Итак, как я могу получить этот рабочий путь, предположим, что я получаю следующий относительный путь:

/devel/nm/dev/http-api/http-api/index.php


person Shlomo    schedule 25.03.2013    source источник
comment
удалить пробел в TWinLogin.ph p ?   -  person Unamata Sanatarai    schedule 25.03.2013
comment
Это было просто от терминального копирования...   -  person Shlomo    schedule 25.03.2013


Ответы (1)


realpath пытается получить реальный путь в файловой системе -- абсолютный путь. Так что, скорее всего, оно начинается с косой черты.

Если ваш результирующий путь начинается с косой черты, и php пытается потребовать/включить его, скорее всего, он подумает, что это «абсолютно». И если он не видит там существующий файл - он выдает вам эту ошибку.

Если вы хотите использовать относительные пути, избегайте realpath.

person gaRex    schedule 25.03.2013
comment
Спасибо. Пожалуйста, смотрите мое редактирование. Кроме того, я пробовал некоторые варианты без косой черты в начале - не сработало. - person Shlomo; 25.03.2013
comment
Что-то вроде '../../../../etc/../etc/../'? Подготовьте это правильно - я надеюсь, вы поняли идею. - person gaRex; 25.03.2013
comment
Вы знаете, что такое относительные пути? Например, когда мы находимся в /home/a/b/c, то чтобы попасть в a, мы просто набираем в консоли cd ../... Я говорю вам об этом. - person gaRex; 25.03.2013
comment
Тоже о родственнике. Когда путь начинается с косой черты -- он не может быть относительным. Оно может быть относительным, если оно начинается с одной или двух точек. В вашем примере оба пути начинаются с косой черты. Может тут проблема? - person gaRex; 25.03.2013
comment
Конечно, я знаю, что такое относительный путь. Мой заданный относительный путь к файлу мне неизвестен. Теперь мне нужен абсолютный путь к этому файлу. Как я могу этого добиться? - person Shlomo; 25.03.2013
comment
Эммм... Возьмем какой-нибудь корневой путь и добавим к нему свой относительный путь? Я просто не понимаю проблемы здесь. - person gaRex; 25.03.2013
comment
Спасибо за обсуждение. Не распознал realpath, принимает абсолютный путь системы. - person Shlomo; 26.03.2013