Я запутался в том, как работает слеш в 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
файл хранится в подкаталоге.
Теперь я понимаю. Косая черта /
работает по-другому в .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'; ?>
Это мой вывод, если я прав.
Почему последние четыре примера не работают? Символ «/» должен
возвращает 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');?>