加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 从不同目录深度的不同页面动态添加相同的CSS文件

发布时间:2020-12-13 21:41:24 所属栏目:PHP教程 来源:网络整理
导读:好吧,我一直试图解决这个问题一段时间了. 我有一个我正在研究的网站,这里基本上是我的结构: index.phppage-x/ index.php page-x-y/ index.phpinclude/ functions.phpcss/ main.css 除了添加更多的子文件夹和索引页面. 基本上是三个不同级别的页面. 它们都需
好吧,我一直试图解决这个问题一段时间了.
我有一个我正在研究的网站,这里基本上是我的结构:

index.php
page-x/
    index.php
    page-x-y/
        index.php
include/
    functions.php
css/
    main.css

除了添加更多的子文件夹和索引页面.
基本上是三个不同级别的页面.

它们都需要有css / main.css,但是任何一个索引页面的路径都会有所不同.

现在我使用functions.php添加CSS,并且必须手动输入从索引页面到functions.php的相对路径(即require_once(“../ include / functions.php”);或../. ./include等

我怎样才能使functions.php能够找出它所包含的任何索引页面到css / main.css的相对路径?

I.E.我如何为functions.php中的以下代码定义$relDir:

echo '<link rel="stylesheet" type="text/css" href="' . $relDir . 'css/main.css" />';

我可以每次手动传递“”或“../”或“../../”到该功能,但我可以避免吗?

编辑3
如果我定义$BASE = dirname(__ DIR__);在functions.php中,我可以找到站点的根,然后从那里获取CSS的绝对路径.

然而,css似乎没有正确链接,在我的本地机器上生成的链接看起来像:(我可以操纵斜线以保持一致,但它没有帮助)

"C:Documents and SettingsLucassite/css/main.css"

(注意:我在easyPHP上使用别名,以便我可以从http://127.0.0.1:8888/site/连接到此地址但but__DIR__找到该文件的ACTUAL目录.

在我正在测试的(我的大学)服务器上回来了

"/Volumes/Web/Students/MYNAME/Sites/MYSITE/css/main.css"

网站的ACTUAL URL如下:

http://www.SCHOOL.com/MYNAME/MYSITE/

CSS在两种情况下都不会链接

编辑2我可以将$relDir定义为:

str_repeat('../',substr_count($_SERVER['REQUEST_URI'],'/');

根据索引的深度返回以下内容之一:

""
"../"
"../../"

这显然有很多处理.听起来最好的做法是调查适当的测试环境,并使用绝对路径.我会调查一下.我仍然有点像一些新东西.

编辑1:好的,大多数人都建议我坚持手动操作,最初有一个函数调用,如下所示:

<?php require_once("../include/functions.php");
buildHead("Music","../"); //($title,$relDir) ?>

我只需将../更改为每个页面的两个地方.

解决方法

最简单的方法?使用绝对路径.如果您的网站只停留在一条固定路径上,那就很容易了.如果您想让自己随意更改站点结构,请添加配置参数 – 例如.在每个PHP文件的顶部包含一个配置文件,并在其中定义一个$BASE参数,该参数保存应用程序库的绝对路径,然后执行:

echo '<link rel="stylesheet" type="text/css" href="'.$BASE.'/css/main.css" />'

如果$BASE为空,则默认为您的网络服务器的根目录.

您也可以使用__DIR__魔术常量自动执行所有这些处理(如果使用PHP< 5.3,则为__FILE__但是它没有太大变化 - 您只需要从您获得的文件名中删除文件名).如果您在每个PHP文件的顶部包含此配置文件(或者您使用apache auto prepend指令),并且您的配置文件位于您网站的基本目录中,那么这就足够了:

$BASE = __DIR__;

否则,如果它位于目录中,您只需要启动,但这在部署时是已知的,并且不依赖于请求.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读