Я работаю над проектом с использованием 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
папка так и не сработала. Я также использовал расположение файла на диске, но безрезультатно.
Я был бы очень признателен за любую помощь.
Хорошо, я нашел другое решение от Вот
Код:
$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" />
Посоветовавшись с кем-то по этому вопросу, я пришел к выводу (строго говоря о своем собственном проекте), что:
document root
указано в vhost
конфигурации. Альтернативой является указать document root
в learning_php/public/
и структурировать проект следующим образом: Суть является то, что, насколько я мог узнать, папки за пределами document root
недоступны для браузера (что имеет смысл учитывать соображения безопасности и то, как большинство фреймворков PHP используют этот принцип). Тем не менее, одним и тем же файлом можно управлять с помощью server-side
сценарии.
Пожалуйста, поправьте меня, если я ошибаюсь.
попробуйте использовать этот код:
$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__);
чтобы получить текущий каталог.
Это то, что я использую, надеюсь, это поможет.
Любые проблемы попробуйте Нажав здесь
Попробуйте изменить конфигурацию на:
<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" />