PHP [function.require]: не удалось открыть поток: такой проблемы с файлом или каталогом нет - PullRequest
0 голосов
/ 28 августа 2010

Я получаю следующую ошибку в одной из моих функций:

require(../htmlpurifier/library/HTMLPurifier.auto.php) [function.require]: failed to open stream: No such file or directory

Я могу исправить эту проблему, если кодирую путь

./htmlpurifier/library/HTMLPurifier.auto.php

Но я хочу отобразить включениефайл на разных уровнях папок на моем веб-сайте, без необходимости перекодировать путь в моей функции include каждый раз, что противоречит цели моего включения.Есть ли способ, которым я мог бы работать без необходимости каждый раз перекодировать путь?Есть ли способ включить полный путь?

Ответы [ 4 ]

0 голосов
/ 28 августа 2010

Как насчет настройки пути к этому файлу .php в качестве переменной конфигурации в вашем скрипте?Предположительно, вы будете загружать некоторые библиотеки общих функций на всех своих страницах, поэтому просто сделайте:

$PATH_TO_PURIFIER = 'C:\this\that\whatever\HTMLPurifier.auto.php';

в этом общем файле, тогда вы можете просто сделать

include('commonstuff.php');
include($PATH_TO_PURIFIER);

Покаcommonstuff.php находится где-то в вашем PHP include_path, гораздо надежнее сделать это таким образом, чем пытаться динамически вычислить путь где-либо еще.Особенно, если ваша структура каталогов может измениться, что сделает вычисленный путь недействительным и заставит вас изменить каждый PHP-файл еще раз.

0 голосов
/ 28 августа 2010

Вы используете неправильный путь.
Просто соедините эти 2 строки и почувствуйте разницу.

../htmlpurifier/library/HTMLPurifier.auto.php
./htmlpurifier/library/HTMLPurifier.auto.php

Это 2 разных пути, и они никогда не будут работать одновременно. Последние указывают на текущий каталог, а первый - на один уровень выше.

Но я хочу отобразить файл включения во многих разных уровнях папок на моем веб-сайте без необходимости перекодировать путь внутри моей функции

это разумное желание. Вот, пожалуйста:

require $_SERVER['DOCUMENT_ROOT'].'/htmlpurifier/library/HTMLPurifier.auto.php';

(при условии, что эта папка htmlpurifier находится в корне документа)

0 голосов
/ 28 августа 2010

Попробуйте это

require (dirname(__FILE__).'/../htmlpurifier/library/HTMLPurifier.auto.php');
0 голосов
/ 28 августа 2010

Попробуйте это:

require realpath(dirname(__FILE__) . '/htmlpurifier/library/HTMLPurifier.auto.php');

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

...