更改文档根目录后包含来自不同文件夹的文件

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

项目结构如下所示:

我正在努力实现这个目标:

我遇到的问题:

我尝试使用 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 脚本来操作同一文件。

如有错误请指正