Я использую 000webhost, который использует папку public_html в корневой папке в качестве видимого корня для сайта. В этой папке у меня есть папка с некоторыми скриптами PHP и другими папками с индексными страницами PHP. Использование require "/assets/includes/scriptname.php";
не работает, поскольку он пытается найти папку sibling для public_html. Мне разрешено редактировать .htaccess, чтобы изменить корневую папку относительно PHP-поиска, но я не знаю, как это сделать.
Дерево файлов:
public_html (within root, but simulated root) folder1 index.php folder2 index.php folder3 index.php assets subfolder subfolder index.php
Короче говоря, как мне сделать указанную точку кода внутри /public_html/
без явного объявления ее (желательно как изменение .htaccess, так как я хочу, чтобы мой код мог быть перемещен на другой хост без перезаписи чего-либо).
Чтобы ответить на переписывание .htaccess, не могли бы вы объяснить, как каждая строка работает? Благодарю.
.htaccess
не помогает. Это конфигурация Apache и никак не влияет на поведение PHP.
Код:
require "/assets/includes/scriptname.php"
говорит PHP, чтобы включить файл, используя абсолютный путь. Использование жестко закодированных абсолютных путей не рекомендуется, потому что код не будет работать, когда вы переместите его в другой каталог или на другой сервер с разными путями.
Лучший способ указать путь к включенному файлу – создать его время выполнения, начиная с пути вставки. Здесь используются dirname()
функции PHP dirname()
и константа __DIR__
.
Учитывая структуру файла образца:
public_html | +- index.php | +- assets | | | +- somescript.php | +- includes | +- header.php | +- footer.php
Предположим, вам нужно включить assets/somescript.php
в index.php
. Напишите это в index.php
:
require __DIR__.'/assets/somescript.php';
Магическая константа __DIR__
содержит каталог файла, в котором он используется. Для index.php
'/(...path-to-your-user-directory...)/public_html'
устанавливается в '/(...path-to-your-user-directory...)/public_html'
.
Если somescript.php
необходимо включить header.php
он должен сделать это следующим образом:
require dirname(__DIR__).'/includes/header.php';
и так далее.
Таким образом вы можете переместить все приложение в другой каталог, на другой сервер и даже на другую ОС, и он все равно будет работать.