/в начале ссылки для доступа к корневой папке не работает в php include.
например, "/example/example.php"
Какое решение?
/в начале ссылки для доступа к корневой папке не работает в 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" буквально там)
EDIT:
Дополнительная информация DOCUMENT_ROOT и другие переменные PHP SERVER можно найти здесь
include() (и многие другие функции, такие как require(), fopen() и т.д.), все сработают с локальной файловой системы, а не с веб-корнем.
Итак, когда вы делаете что-то вроде этого
include( "/example/example.php" );
Вы пытаетесь включить из корня вашей машины * nix.
И хотя есть множество способов приблизиться к тому, что вы делаете, предложения Пола Диксона, вероятно, ваши лучшие ставки.
На каждом веб-сервере есть папка public_html
, в которой вы обычно держите свои файлы и т.д. Используя /
, вы не дойдете до public_html
, вместо этого вы направляетесь к основному (непобедимому) корню. Итак, используйте $_SERVER['DOCUMENT_ROOT']."/your/locati.on"
вместо
Я решил это на машине под управлением 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:\
Теперь обе версии разрешили:
include '/common/common.inc'; // access to mapped W: root include 'common/common.inc'; // access to W: within 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');
}
может быть, это немного нетрадиционно
Если у меня есть случай, как
/var/www/namedir/ <= root
/var/www/namedir/example/example.php <= file to include
-- directory when i need the include --
/var/www/namedir/dir1/page.php
/var/www/namedir/dir1/dirA/page.php
/var/www/namedir/dir1/dirB/page.php
решение, которое я использую, простое. получить путь до "Dir1"
как то так
include (substr(dirname(__FILE__),0,strpos(dirname(__FILE__), '/dir1'))."/example/example.php");
Я нашел это полезным идентификатором, мне нужно переименовать основной subdir например из
/var/www/namesite/internalDirA/dirToInclude/example.php
/var/www/namesite/internalDirA/dir1/dirA/example.php
/var/www/namesite/internalDirA/dir1/dirB/example.php
ДО
/var/www/namesite/dirReserved/dirToInclude/example.php
/var/www/namesite/dirReserved/dir1/dirA/example.php
/var/www/namesite/dirReserved/dir1/dirB/example.php