Нужна стратегия включения PHP-файла - PullRequest
11 голосов
/ 04 декабря 2008

Я нахожусь в процессе настройки проекта php, но не очень хорошо знаю, как правильно использовать команды php include / require. Мой макет в настоящее время выглядит так:

/public   --apache points into this directory  
/public/index.php  
/public/blah/page.php  
/utils/util1.php       -- useful classes/code are stored in other directories out here  
/dbaccess/db1.php  

dbaccess/db1.php  



require '../utils/util1.php

публичный / index.php

require '../dbaccess/db1.php'

общественности / бла / page.php

require '../../dbaccess/db1.php'

Проблема в том, что это из php 'include' документации:

Если имя файла начинается с ./ или ../, оно просматривается только в текущем рабочем каталоге

Таким образом, public / blah / page.php не работает, потому что он включает dbaccess / db1.php, который взрывается при попытке включить util1.php Сбой, потому что это относительный путь из оригинального скрипта в public / blah /, а не из dbaccess /

Это кажется довольно глупым - db1.php просто должен знать, откуда он включается, и который не будет работать.

Я видел такие стратегии:

require_once dirname(__FILE__) . '/../utils/util1.php');

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

Это нормально? Должен ли я продолжать идти по этому пути или я что-то упускаю здесь очевидное?

Ответы [ 12 ]

0 голосов
/ 04 декабря 2008

Я использую

require '../path/to/file.ext';

без проблем.

Требуется также оператор, а не функция, поэтому его следует использовать как

require '/path/to/file.ext';

не

require('/path/to/file.ext');
0 голосов
/ 04 декабря 2008

Почему бы не требовать его на основе полного пути?

Например, /sharedhost/yourdomain.com/apache/www является корневым каталогом вашего документа, так почему бы не использовать

require('/sharedhost/yourdomain.com/apache/www/dbutils.php');

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

Вы также можете установить глобальную переменную, равную ее части /sharedhost/yourdomain.com/apache/, чтобы вы могли перемещать сайт.

require(WWWROOT . '/dbutils.php');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...