Intereting Posts

при включении () или require () мне всегда нужно использовать ../../ относительно моего файла? Есть простой способ?

Я создаю веб-приложение, в котором файлы 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

Однако лучше создать класс автозагрузчика …

http://php.net/manual/en/language.oop5.autoload.php

Использовать это:

 include($_SERVER['DOCUMENT_ROOT'] . '/inc/connect.php'); 

Это приведет вас к корню документа, а затем построит остальное оттуда …

Вы можете установить путь включения в php.ini или изменить рабочий каталог с помощью chdir . Я предпочитаю, чтобы оба были в безопасности, но это прекрасно работает:

 chdir($_SERVER['DOCUMENT_ROOT']); 

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