更改文档根目录后包含来自不同文件夹的文件
Including files from different folders after changing the document root
我正在使用 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>
Windows 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
文件。我认为发生这种情况是因为我在 vhost
配置中重写了 DocumentRoot
。
我尝试使用 PHP
常量从类似问题中得到答案,但我无法弄清楚问题出在哪里。例如,我试图将此 <link rel="stylesheet" type="text/css" href="../public/css/style.css">
添加到 page
文件夹下的 index.php
中,但没有成功。我也使用了磁盘上的文件位置,但没有结果。
非常感谢任何帮助。
尝试使用此代码:
$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__);
获取当前目录。
这是我用的,希望对你有帮助。
有问题试试Clicking Here
好的,我从 Here
找到了另一个解决方案
代码:
$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" />
尝试将配置更改为:
<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" />
在就此问题咨询其他人后,我得出结论(严格指我自己的项目):
- 显示在 css 文件上方的结构无法被浏览器访问,因为它只是在
vhost
配置中指定的 document root
之外。另一种方法是将 document root
指向 learning_php/public/
并以这种方式构建项目:
- 另一种实现预期结果但不修改项目结构的方法是通过 PHP 读取 css 文件,然后在需要的地方存储/输出内容。
底线是,据我所知,浏览器无法访问 document root
之外的文件夹(请记住这一点安全原因以及大多数 PHP 框架如何使用此原则)。但是,可以使用 server-side
脚本来操作同一文件。
如有错误请指正
我正在使用 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>
Windows 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
文件。我认为发生这种情况是因为我在vhost
配置中重写了DocumentRoot
。
我尝试使用 PHP
常量从类似问题中得到答案,但我无法弄清楚问题出在哪里。例如,我试图将此 <link rel="stylesheet" type="text/css" href="../public/css/style.css">
添加到 page
文件夹下的 index.php
中,但没有成功。我也使用了磁盘上的文件位置,但没有结果。
非常感谢任何帮助。
尝试使用此代码:
$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__);
获取当前目录。
这是我用的,希望对你有帮助。 有问题试试Clicking Here
好的,我从 Here
找到了另一个解决方案代码:
$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" />
尝试将配置更改为:
<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" />
在就此问题咨询其他人后,我得出结论(严格指我自己的项目):
- 显示在 css 文件上方的结构无法被浏览器访问,因为它只是在
vhost
配置中指定的document root
之外。另一种方法是将document root
指向learning_php/public/
并以这种方式构建项目:
- 另一种实现预期结果但不修改项目结构的方法是通过 PHP 读取 css 文件,然后在需要的地方存储/输出内容。
底线是,据我所知,浏览器无法访问 document root
之外的文件夹(请记住这一点安全原因以及大多数 PHP 框架如何使用此原则)。但是,可以使用 server-side
脚本来操作同一文件。
如有错误请指正