Корневой путь не работает с php. PHP Lang

Я полагаю, что в корневой папке вы имеете в виду ваш корневой веб-документ, а не корень файловой системы.

С этой целью вы можете

У меня тоже была эта проблема. Ответ Пола Диксона правильный, но, возможно, это поможет вам понять, почему:

Проблема здесь в том, что PHP – это серверный язык. Где чистые HTML-документы могут обращаться к файлам на основе корневого URL-адреса, установленного на сервере (т. Е. Для доступа к изображению из любого подкаталога, который вы используете, вы должны использовать /images/example.jpg для перехода от верхнего каталога вниз ), PHP на самом деле обращается к корню сервера, когда вы используете include (/images/example.jpg)

Структура сайта, которую вы создали, фактически находится в файловой системе Apache Server. Мой корневой сайт выглядит примерно так, начиная с корня сервера и спускающегося вниз:

 /home2/siteuserftp/public_html/test/ 

«test» представляет корень вашего сайта

Поэтому, чтобы ответить на ваш вопрос, почему ваш PHP-компонент не получает желаемого результата (он работает точно так, как он должен), это потому, что вы просите PHP-код попробовать и найти файл в корне сервера, когда он на самом деле расположенный в корне HTML вашего сайта, который будет выглядеть примерно так.

Ваш файл будет основан на корне сайта «test /» и будет выглядеть примерно так:

/home2/siteuserftp/public_html/test/about/index.php

Ответ Пол Диксон дал:

 include($_SERVER['DOCUMENT_ROOT'].'/example/example.php') 

это то, что исправит вашу проблему (не беспокойтесь о том, чтобы найти корень документа для замены «DOCUMENT_ROOT», PHP сделает это за вас. Просто убедитесь, что у вас есть «DOCUMENT_ROOT» буквально там)

РЕДАКТИРОВАТЬ:

Дополнительная информация DOCUMENT_ROOT и другие переменные PHP SERVER можно найти здесь

include () (и многие другие функции, такие как require (), fopen () и т. д.), полностью работают с локальной файловой системой, а не с веб-корнем.

Итак, когда вы делаете что-то подобное

 include( "/example/example.php" ); 

Вы пытаетесь включить из корня вашей машины * nix.

И хотя есть множество способов приблизиться к тому, что вы делаете, предложения Пола Диксона, вероятно, ваши лучшие ставки.

Я решил это на машине под управлением Windows и IIS:

 <?php $docroot = 'http://www.example.com/'; include ($docroot.'inc-header.php'); ?> 

Если вы находитесь на локальной машине разработчика, вы можете заставить свой домен указывать на localhost, добавив следующее в C: \ Windows \ System32 \ drivers \ etc \ hosts

 127.0.0.1 www.example.com 

Кроме того, вам нужно включить enable_url_include в php.ini, например, так

 allow_url_include = On 

Для меня трюк работал. Я использую Windows с IIS, поэтому DOCROOT – это C: \ Inetpub \ wwwroot.

  1. выполните подстановку C: \ Inetpub \ wwwroot на диск. Пусть это W: (WEB-содержимое).
     subst W: C: \ Inetpub \ wwwroot
  1. отредактируйте php.ini следующим образом: добавьте W: \ to include_path, измените doc_root на W: \

 include_path = ".; c: \ php \ active \ includes; W: \"
 doc_root = W: \

  1. поместите команду subst в файл CMD в папке автозагрузки, чтобы сделать картографирование автоматически.

Теперь обе версии разрешили:


     включить '/common/common.inc';  // доступ к сопоставленному W: root
     включают «common / common.inc»;  // доступ к W: внутри include_path

некоторые версии PHP могут иметь разделитель в конце корня документа, а другие – нет. В практическом отношении вы можете использовать:

  $r = trim(filter_input(INPUT_SERVER, 'DOCUMENT_ROOT', FILTER_SANITIZE_STRING)); if (substr($r, 0, 1) == '/') { define("PATCH_SEPARATOR", "/"); } else { define("PATCH_SEPARATOR", "\\"); } if (substr($r, -1) == PATCH_SEPARATOR) { include_once ($r . 'example/example.php'); } else { include_once ($r . PATCH_SEPARATOR . 'example/example.php'); }