PHP - адаптировать ссылки из внешних файлов php - PullRequest
0 голосов
/ 11 октября 2018

Context

Допустим, у меня есть следующий контекст каталога:

.
├── index.php
├── other.php
├── nav.php
└── subfolder
    └── foo.php

Мой nav.php содержит простой элемент навигации для каждой страницы моего сайта, например

<nav>
    <ul>
        <li><a href="index.php">Main</a></li>
        <li><a href="other.php">Another</a></li>
    </ul>
</nav>

Проблема

Теперь, поскольку мой php-файл nav предназначен для универсальности, я хочу иметь возможность использовать его в php-файле, который находится в подпапках моего сайта, например, foo.php.Проблема в том, что включение nav.php в foo.php не даст мне исключительного результата, так как код php просто копируется и вставляется в foo, ссылки на ссылки являются относительными, сервер не найдет файлы index.php иДругоеличная папка с символической ссылкой от фактического корневого каталога на папку студента.Поэтому, если я пытаюсь получить реальный абсолютный путь, сервер пытается получить к нему доступ с помощью символической ссылки и не понимает его.

Я пытался использовать другой подход, вычисляя базу веб-сайта.url (из любой папки), а затем явно запрашивает абсолютную ссылку с синтаксисом двойной косой черты ('//' + base + 'index.php').Проблема этого подхода, хотя он и работает, состоит в том, чтобы каждый php-файл определял глобальную переменную, хранящую этот базовый URL, или имел один php-файл с таким большим определением и включал его в любой php-файл.

Я нахожу последнее решение довольно грязным, хакерским и ненадежным ни при каких обстоятельствах.Поэтому я спрашиваю, есть ли php-нативный способ сделать это (то есть обработать относительный путь при включении файлов).

1 Ответ

0 голосов
/ 11 октября 2018

Для тех, кто ищет быстрое исправление, которое может выполнить эту работу: вы можете рекурсивно искать свой индексный файл и добавлять эту глубину в URL.

<?php
$level = "";
while (file_exists("..") && !file_exists($level . "index.php")) {
    $level = $level . "../";
}
?>

<nav class="col-3">
    <ul>
        <li><a href="<?php echo $level . 'index.php'; ?>">HOME</a></li>
        <li><a href="<?php echo $level . 'query.php'; ?>">REQUÊTE</a></li>
        <li><a href="<?php echo $level . 'view.php'; ?>">VISUALISATION</a></li>
    </ul>
</nav>

Основное преимущество этого обходного пути состоит в том, что онзанимает всего 3 строки кода и работает очень хорошо, если вы хотите найти файл, который находится на вершине иерархии веб-сайта.Но, к сожалению, это не удовлетворит всех потребностей.

...