Я создаю веб-приложение, в котором файлы php распространяются через разные каталоги, поэтому в типичный файл может быть включено несколько. Все эти файлы повсюду.
файл php может выглядеть так:
include('../../some.php'); require('../../some.php');
и в другом файле у вас может быть что-то вроде этого:
include('../../../../some.php'); require('../../../../some.php');
вinclude('../../../../some.php'); require('../../../../some.php');
это может быть немного из-под контроля, и несколько сложно отслеживать. Есть ли способ, которым я могу это сделать, чтобы мне не нужно … / ../../..
все время?
Я попытался сделать это:
include('http://www.mywebsite.com/some.php'); require('http://www.mywebsite.com/some.php');
вinclude('http://www.mywebsite.com/some.php'); require('http://www.mywebsite.com/some.php');
но, похоже, это не сработает, но смешно, что я не получу ошибку PHP при использовании require, только call to function x() error, function or object doesn't exist
ошибки типа. Он никогда ничего не говорил о файле, который не существует. Заранее спасибо.
Не доверяйте переменным $_SERVER
. В некоторых средах они могут быть установлены / изменены пользователем, выполняющим запрос. Гораздо лучше определить базовый путь вручную в вашем файле index / bootstrap и использовать его, когда это необходимо.
define('SYSTEM_PATH', __DIR__ . '/');
или в версии PHP до 5.3 вы можете сделать это
define('SYSTEM_PATH', dirname(__FILE__) . '/');
Теперь вы всегда можете узнать путь к своим файлам.
require(SYSTEM_PATH . 'lib/class.php');
Оба __FILE__
и __FILE__
являются безопасными константами, заданными PHP, и им можно доверять.
Вы можете автозагружать классы следующим образом:
function __autoload($class_name) { require SYSTEM_PATH . strtolower($class_name) . '.php'; }
В других новостях я никогда не задумываюсь о хорошем использовании для include()
. Если вам нужно использовать, вы делаете что-то неправильно.
это то, к чему были притянуты пути. если есть папка за пределами вашей общей папки, которую вы часто используете, создайте путь включения, ведущий к ней. таким образом вы можете относиться к нему так, как если бы он находился в той же папке, что и все остальное.
http://php.net/manual/en/function.set-include-path.php
Однако лучше создать класс автозагрузчика …
Использовать это:
include($_SERVER['DOCUMENT_ROOT'] . '/inc/connect.php');
Это приведет вас к корню документа, а затем построит остальное оттуда …
Вы можете установить путь включения в php.ini или изменить рабочий каталог с помощью chdir
. Я предпочитаю, чтобы оба были в безопасности, но это прекрасно работает:
chdir($_SERVER['DOCUMENT_ROOT']);
Теперь вы можете включить ваши файлы, как если бы текущий был в корневой папке.