php включает в себя другой файл php

Я сейчас совсем запутался, и у меня болит мозг! :( ржунимагу

Корень:

  • index.php

Включает:

  • cat.php
  • собака.php

индекс включает собаку: include("includes/dog.php");

собака включает кошку: include("cat.php");

Когда я запускаю индекс, для кошки он говорит:

  1. Ссылка на сервер не может быть установлена
  2. Пользователю отказано в доступе ...

Однако, если я запускаю собаку, у меня нет проблем...

Я предполагаю, что это путь, но я пробовал ./includes/cat.php без радости...


person Emma    schedule 12.06.2010    source источник


Ответы (4)


Это связано с тем, что когда вы включаете относительный путь, он относится к точке входа (первому файлу PHP, вызываемому веб-сервером).

В собаке сделать

include(dirname(__FILE__) . '/cat.php'); // __FILE__ is always the name of the php file it's in
person Bart van Heukelom    schedule 12.06.2010
comment
да, Эмма, вы включаете файл a/c dog.php, но вместо этого вы должны включить a/c index.php. просто подумайте, что dog.php собирается вставить в index.php и использовать ваш путь a/c, который - person nik; 12.06.2010
comment
Спасибо, Барт. Надеюсь, это исправит. Сначала мне нужно кое-что почистить... Ник – Не уверен, что понял, извини. Вы имеете в виду, что я должен включить собаку и кошку из индекса, а затем не беспокоиться об этом? - person Emma; 12.06.2010

Это зависит от того, где находится скрипт, который вы выполняете. Когда вы выполняете /index.php, путь к скрипту устанавливается в /, поэтому все включает запуск оттуда. Это означает, что вы можете найти /includes/dog.php, но не можете найти /cats.php. Имейте в виду, что даже если вы включаете cats.php из своего сценария /includes/dog.php, это не меняет исходный путь выполнения.

С другой стороны, когда вы выполняете /includes/dog.php, ваш путь устанавливается в /includes/, поэтому PHP также может найти cats.php.

Прочитайте комментарий Барта о том, как решить эту проблему.

person Anax    schedule 12.06.2010

Другой способ решить эту проблему — установить путь включения файлов, взгляните на это.

http://ve2.php.net/manual/en/function.set-include-path.php

person Kusanagi2k    schedule 28.09.2010

Спасибо за эту хорошую тему.

Я использовал ответ Барта, чтобы решить эту проблему. Но у меня еще есть один вопрос.

Я был удивлен, что он работал в системе моего товарища даже без использования dirname(__FILE__), поэтому я провел небольшое исследование и сравнил оба файла php.ini. Я заметил небольшую разницу в параметре include_path в php.ini.

В моем php.ini он установлен в каталог Pear. Поэтому я прокомментировал просто для проверки, и, к моему удивлению, это сработало. Именно тогда я понял, что нам нужно включить какую-то папку, которую я не знаю, или закомментировать ее, чтобы она принимала значение по умолчанию.

person Kiran Ambati    schedule 30.12.2011