Я использую 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';
и так далее.
Таким образом вы можете переместить все приложение в другой каталог, на другой сервер и даже на другую ОС, и он все равно будет работать.