当我使用php include()
或require()
函数时,我遇到了这个问题。我会尽量在这里尽可能地解释它,但如果它没有意义,请告诉我。我正在构建一个主index.php
具有include ('themes/main/header.php')
的主题系统,但在链接样式表和图像时会出现错误。这是我的目录的设置方式。
以下是我的header.php(条纹)的内容:
<html>
<head>
<link rel="stylesheet" href="css/layout.css" type="text/css" media="screen" />
</head>
<body>
<div class="header">
<img src="images/logo.png" />
</div>
当我加载主index.php时,无法找到样式表和图像。我知道这是因为头文件被带入index.php文件但是有办法解决这个问题吗?非常感谢你。
答案 0 :(得分:1)
PHP的include是(在PHP中)服务器端,但HTML文件中的引用是客户端的,因此它们引用了他们感知的文件(index.php)。只需调整文件中的路径即可容纳。
答案 1 :(得分:1)
最简单的解决方案是添加一个&#39; template_path&#39;变量到模板文件并将该变量传递给模板解析器:
<html>
<head>
<link rel="stylesheet" href="{TEMPLATE_PATH}css/layout.css" type="text/css" media="screen" />
</head>
<body>
<div class="header">
<img src="{TEMPLATE_PATH}images/logo.png" />
</div>
答案 2 :(得分:0)
<link rel="stylesheet" href="/themes/main/css/layout.css" type="text/css" media="screen" />
答案 3 :(得分:0)
我在重新阅读您的问题后进行了编辑 - 将您的路径更改为:
href="/themes/main/css/layout.css"
src="/themes/main/images/logo.png"
这应该解决它,但你应该考虑使用'http'绝对路径作为最佳实践。我希望它有所帮助。
答案 4 :(得分:0)
我,对我自己来说,使用这样的东西:
define(SITE_ROOT, '/'); //client side root of website
define(SITE_PATH, '/var/www/mywebsite/htdocs/'); //serverside root of website
function url($relative, $startingFrom = false, $echo = true) {
$r = '';
if($startingFrom === false) {
$r = SITE_ROOT . $relative;
} else {
$forward = str_replace('\\', '/', $startingFrom);
$path = substr($forward, 0, strrpos($forward, '/'));
$r = SITE_ROOT . substr($path, strlen(SITE_PATH)) . '/' . $relative;
}
if($echo) {
echo $r;
} else {
return $r;
}
}
简而言之,这为您构建了“站点绝对”路径,这样您也可以更改“主题”的名称,而无需更改其包含的所有绝对引用。
这样,在header.php
你可以写:
<link rel="stylesheet" href="<?php url('css/layout.css', __FILE__);?>" type="text/css" media="screen" />
该函数有几个可选属性,它们应该是自解释的。
答案 5 :(得分:-1)
通常有两种选择:
http://.../css/layout.css
的完整网址或仅包含来自根网址的路径,例如/themes/main/css/layout.css
)/themes/main/css/layout.css
。答案 6 :(得分:-1)
您需要将文件名引用到index.php
。解决此问题的另一种方法是在包含完整网站URL的配置文件(或类似于index.php
的小项目)中声明一些变量:
$site = http://www.example.com/
然后将此用于所有css,链接,脚本等引用。这样它将是一条绝对的道路。然后你可以做类似的事情:
<img src="<?= $site ?>images/logo.png" />
如果我没弄错,我认为使用绝对路径更适合SEO(搜索引擎优化)。