2012-06-07 4 views
0

У меня есть документы на http://www.example.com/ в /home/www/example.com/www работает на Debian Squeeze.PHP include не работает

/home/www/example.com/ 
    www/ 
     index.php 
    php/ 
     include_me.php 

В php.ini я раскомментировать и изменен:

include_path =".:/home/www/example.com" 

В index.php скрипта в WWW, я require_once("/php/include_me.php"). Выход я получаю от РНР:

Warning: require_once(/php/include_me.php) [function.require-once]: failed to open stream: No such file or directory in /home/www/example.com/www/index.php on line 2 

Fatal error: require_once() [function.require]: Failed opening required '/php/include_me.php' (include_path='.:/home/www/example.com') in /home/www/example.com/www/index.php on line 2 

Как вы можете видеть, включаемые-путь правильно установлен в соответствии с ошибкой. Но если я делаю require_once("../php/include_me.php");, он работает. Следовательно, что-то должно быть неправильным с include-path.

Кто-нибудь знает, что я могу сделать, чтобы исправить это?

+1

-1 «<вставить какую-либо функцию/construct here> не работает, так как это должно быть «плохое имя для вашего вопроса». Компьютеры делают то, что вы им говорите, а не то, что вы хотите от них делать. –

ответ

7
php/ 

относительный путь и использует текущую директорию в качестве отправной точки

./php/ 

относительный путь и явно заявляет текущий каталог (.) в качестве отправной точки

/php/ 

- не относительный путь, это означает, что начальная точка - это прямой уровень ORY (корневой каталог /)

+0

Точно. Поэтому при использовании/php/он должен включать include_path./php/ –

+0

Но похоже, что нет. –

+0

Нет. «/ Php» будет включать в себя папку из корня системы подачи, что, я думаю, не то, что вы хотите. – halfer

2

Из документации на include:

Если путь определен - будь то абсолютное (начиная с буквы диска или \ на Windows, или/на Unix/Linux систем) или относительно текущего каталога (начиная с. или ..) - include_path будет вообще проигнорирован. Например, если имя файла начинается с ./, парсер будет искать в родительском каталоге, чтобы найти запрошенный файл.

Поскольку вы указываете абсолютный путь в этом случае, include_path игнорируется.

1

Начало слэш на ваш требуйте сразу будет искать от корня ... попробуйте:

require_once('php/include_me.php'); 
+0

Aha, поэтому, если вы используете php/include_me.php, она будет выглядеть в папке www для файла, и если он не может найти его, он будет искать в include_path. PHP/include_me.php? –

+1

Оба 'php/include_me.php' и'./Php/include_me.php' должны работать нормально (это значит, что они должны использовать путь include, пока не найдут файл). –

1

Это пытается захватить файл буквально в/PHP в файловой системе, а не ваш веб-каталог.

require_once("/php/include_me.php"); 
2

Я согласен с Михаем Stancu, но я хотел бы добавить, что может быть лучше практика включает в себя использование (__ имя-каталога FILE__), так что, как каталоги перемещаются вокруг кода, не сломается. Это будет действовать как абсолютный путь, но позволит вам думать о них как о локальных путях.

+0

'dirname (__ FILE __)' относится к каталогу, в котором текущий ** файл **, который отличается от каталога, из которого запускался текущий ** скрипт ** (например, index.php включает класс/doohickie. php, внутри класса 'dirname (__ FILE__) == '/ var/www/class'' while''. '=='/var/www ') ', это зависит от того, какие ожидаемые/ожидаемые результаты –

2

Объяснение require_once ("/ PHP/include_me.php"):

У вас есть свой путь, включают в себя набор для '/home/www/example.com/', но это поддиректории/главная/WWW. Ваш require_once ищет /php/include_me.php.

/ 
home/ 
    www/ 
     example.com/ 
       php/ 
       www/ 
php/ 
    include_me.php 

У вас есть предшествующему/в вашем требуют вызова, который ищет /php/include_me.php. Для поиска /home/www/example.com/php/include_me.php вы хотите:

require_once('php/include_me.php'); 

Вы также можете установить ваш включать путь:

include_path =".:/home/www/example.com/:/home/www/example.com/www/:/home/www/example.com/php/" 
Смежные вопросы