include — как косая черта & quot; / & quot; на самом деле работать в php?

Я запутался в том, как работает слеш в php. Вернуть ли это веб-рут? Или компьютерные файлы root? Или что-то другое?

Я пробовал несколько вещей, например, моя файловая структура на сервере Ubuntu выглядит следующим образом:

/var/www/html/domainname.com/.
--/config/.
--/core.php
--/images/.
--/includes/.
--/footer.php
--/header.php
--/navigation.php
--/index.php

Это работа (все они включены в index.php):

<img src="/images/logo.png" />    # in header.php
<a href="/">Home</a>              # in navigation.php
<a href="/test/test.php">test</a> # in index.php itself

Это не работает:

<?php require_once('/config/core.php'); ?>
<?php include_once('/includes/header.php');?>
<?php include_once('/includes/navigation.php');?>
<?php include_once('/includes/footer.php');?>

Почему последние четыре примера не работают? Символ «/» должен вернуть domainname.com право? Или вместо этого он возвращает «/ var / www / html /»?

Моя цель — поместить все файлы, которые нужно было включить в includes каталог. Итак, каждый .php файл может получить к ним доступ, даже если .php файл хранится в подкаталоге.

2

Решение

Теперь я понимаю. Косая черта / работает по-другому в .php а также .html документы.

в .php файлы, / означает корневую папку компьютера, / в Unix и C: в окнах, как Фориен сказал в комментарии. Но в .html файлы, / означает корневую папку сайта или /var/www/html/domainname.com/ в моем случае. Вот почему я запутался.

Итак, этот код:

<a href="/">Home</a>
<img src="/images/logo.png" />

будет смотреть в /var/www/html/domainname.com/ хотя это написано в .php файлы. Так как .php файлы отправляют его в браузеры как .html файлы. То же самое касается этого:

<?php echo '<a href="/">Home</a>'; ?>

Этот выше все еще заглянуть в /var/www/html/domainname.com/ так как .php файлы повторили это как .html файлы в веб-браузеры.

Но это будет по-другому:

<?php require_once '/includes'; ?>

Это будет выглядеть в / в Unix или C: в окнах. Так как .php файлы работают в серверном компьютере. Вот почему последний не будет работать. Нет никаких /includes каталог в корневом каталоге сервера. Итак, чтобы заставить это работать, я должен использовать это:

<?php require_once $_SERVER['DOCUMENT_ROOT'].'/includes'; ?>

Это мой вывод, если я прав.

2

Другие решения

Почему последние четыре примера не работают? Символ «/» должен
возвращает domainname.com правильно?

Неправильно. Буквально ищет путь /config/core.php, /includes/header.php, так далее.

Удалить / с начала пути или добавить ./, то он будет искать из текущего рабочего каталога. Ты можешь использовать ./ а также ../ для поиска файлов относительно.

Вы можете использовать / установить конфигурацию PHP include_path тоже.

http://php.net/manual/en/ini.core.php#ini.include-path

А также посмотрите логи для лучшего понимания. 🙂

ОБНОВИТЬ:
Также проверьте ChDir, это может быть полезно для вас.

chdir('/var/www/html/domainname.com');
<?php require_once('./config/core.php'); ?>
<?php include_once('./includes/header.php');?>
<?php include_once('./includes/navigation.php');?>
<?php include_once('./includes/footer.php');?>
0

По вопросам рекламы [email protected]