Подтвердить что ты не робот

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

/в начале ссылки для доступа к корневой папке не работает в php include.

например, "/example/example.php"

Какое решение?

4b9b3361

Ответ 1

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

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

  • добавьте веб-корневую папку в включить путь и include('example/example.php')
  • или вы можете include($_SERVER['DOCUMENT_ROOT'].'/example/example.php')

Ответ 2

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

Проблема здесь в том, что 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 можно найти здесь

Ответ 3

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

Итак, когда вы делаете что-то вроде этого

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

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

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

Ответ 4

На каждом веб-сервере есть папка public_html, в которой вы обычно держите свои файлы и т.д. Используя /, вы не дойдете до public_html, вместо этого вы направляетесь к основному (непобедимому) корню. Итак, используйте $_SERVER['DOCUMENT_ROOT']."/your/locati.on" вместо

Ответ 5

Я решил это на машине под управлением 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

Ответ 6

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

  • выполните подстановку 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 в папке автозагрузки, чтобы автоматически сделать сопоставление.

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

    include '/common/common.inc'; // access to mapped W: root
    include 'common/common.inc'; // access to W: within include_path

Ответ 7

некоторые версии 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');
    }

Ответ 8

может быть, это немного нетрадиционно

Если у меня есть случай, как

/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