/ в начале ссылки для доступа к корневой папке не работает в php include.
например, "/example/example.php"
Каково решение?
Я полагаю, что в корневой папке вы имеете в виду ваш корневой веб-документ, а не корень файловой системы.
С этой целью вы можете
include('example/example.php')
и include('example/example.php')
include($_SERVER['DOCUMENT_ROOT'].'/example/example.php')
У меня тоже была эта проблема. Ответ Пола Диксона правильный, но, возможно, это поможет вам понять, почему:
Проблема здесь в том, что 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.
subst W: C: \ Inetpub \ wwwroot
include_path = ".; c: \ php \ active \ includes; W: \" doc_root = W: \
Теперь обе версии разрешили:
включить '/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'); }