Включение файлов из разных папок после смены корня документа

Я работаю над проектом с использованием WAMP. vhost настроен так:

<VirtualHost *:80>
ServerName LearningPHP
DocumentRoot c:/wamp64/www/learning_php/public/page/
<Directory  "c:/wamp64/www/learning_php/public/page/">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require local
</Directory>
</VirtualHost>

Окна host файл выглядит так:

127.0.0.1       LearningPHP       # Project wamp64/www/learning_php
::1             LearningPHP       # Project wamp64/www/learning_php

Структура проекта выглядит следующим образом:

введите описание изображения здесь

Я пытаюсь добиться этого:

  • когда я захожу на сайт, чтобы попасть на learning_php/public/page/index.php (Я думаю, что я достиг этого через vhost конфигурации);
  • внутри каждой папки под page каталог (например, login, profile_add и т. д.) есть два файла: index.php а также process.php, Я использовал этот подход, чтобы лучше организовать свой проект (я еще не знаком с MVC шаблон);
  • внутри css а также js Папки, имя файлов совпадает с именем папки под page каталог (например, page > profile_add => css/profile_add.css или же js/profile_add.js). Позже я объединю все css а также js файлы страницы должны быть в отдельных файлах для ограничения HTTP-запросов;

Проблема, с которой я сталкиваюсь:

  • Я не могу понять, как включить css а также js файлы. Я думаю, что это происходит потому, что я переписываю DocumentRoot в vhost конфигурации.

Я попробовал ответы на похожие вопросы, используя PHP константы, но я не мог понять, в чем проблема. Например, я пытался добавить это <link rel="stylesheet" type="text/css" href="../public/css/style.css"> к index.php под page папка так и не сработала. Я также использовал расположение файла на диске, но безрезультатно.

Я был бы очень признателен за любую помощь.

2

Решение

Хорошо, я нашел другое решение от Вот

Код:

$includePath = str_replace($_SERVER['DOCUMENT_ROOT'], '', str_replace('\\', '/', __FILE__));

Серверы WAMP имеют тенденцию помещать корень документа, вы можете удалить это с str_replace(); поэтому ваш окончательный код должен выглядеть так:

$includeReplace = str_replace($_SERVER['DOCUMENT_ROOT'], '', str_replace('\\', '/', '../css/styles.css'));

тогда в html поставь:

<link href="<?php echo $includeReplace; ?>" rel="stylesheet" type="text/css" />
1

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

Посоветовавшись с кем-то по этому вопросу, я пришел к выводу (строго говоря о своем собственном проекте), что:

  • Структура, отображаемая над файлом CSS, не может быть доступна браузеру, потому что она просто находится вне document root указано в vhost конфигурации. Альтернативой является указать document root в learning_php/public/ и структурировать проект следующим образом:

введите описание изображения здесь

  • Еще один способ достичь желаемого результата, но без изменения структуры проекта, — это чтение файлов CSS через PHP, а затем сохранение / вывод содержимого, где это необходимо.

Суть является то, что, насколько я мог узнать, папки за пределами document root недоступны для браузера (что имеет смысл учитывать соображения безопасности и то, как большинство фреймворков PHP используют этот принцип). Тем не менее, одним и тем же файлом можно управлять с помощью server-side сценарии.

Пожалуйста, поправьте меня, если я ошибаюсь.

1

попробуйте использовать этот код:

$includePath = dirname(__FILE__) . '../css/styles.css'; затем
include ''.$includePath.''; тогда в html:
<link href="<?php echo $includePath; ?>" rel="stylesheet" type="text/css" />
Я склонен не использовать ../../path/path/file.txt и вам нужно вернуться только один файл вместо двух. Попробуйте использовать функцию dirname(__FILE__); чтобы получить текущий каталог.

Это то, что я использую, надеюсь, это поможет.
Любые проблемы попробуйте Нажав здесь

0

Попробуйте изменить конфигурацию на:

<VirtualHost *:80>
ServerName LearningPHP
DocumentRoot c:/wamp64/www/
<Directory  "c:/wamp64/www/">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require local
</Directory>
</VirtualHost>

если это не работает, попробуйте:

<VirtualHost *:80>
ServerName LearningPHP
DocumentRoot c:/wamp64/www/learning_php/public/page/
<Directory  "c:/wamp64/www/">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require local
</Directory>
</VirtualHost>

тогда вы можете использовать:

<link href="../css/styles.css" rel="stylesheets" type="text/css" />

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