在PHP中设置正确路径的正确方法是什么?

时间:2015-01-17 09:22:04

标签: php css

我正在研究PHP MVC框架,我刚发现的问题是目录中特定文件的路径。当我路由到呈现页面的函数时,模板文件中定义的所有文件(包括CSS和图像)都没有被加载。

这是我的文件夹结构

  • 系统
    • 控制器
    • 模型
    • 构造
    • 模板
      • 主页
        • CSS
          • 的style.css
        • 图像
        • JS​​
        • home.php
    • 的init.php
  • 的.htaccess
  • 的index.php

首先,我使用以下代码在index.php中设置了路径:

<?php
 // Path to system
 $system_path = str_replace('\\', '/', dirname(__FILE__)).'/system';
 $template_path = $system_path.'/templates';
?>

就像任何其他php框架一样,我可以在整个框架中使用这些路径变量。所以在我的家庭模板文件(system / templates / home / home.php)中,我有标签来调用位于system / templates / home / css / style.css中的style.css。所以模板文件中的链接标记是

<link rel='stylesheet' type='text/css' href='<?= $template_path; ?>/home/css/style.css' />

当我渲染页面时,上面css文件的绝对路径正确显示为

C:/Appserv/www/mysite/system/templates/home/css/style.css

但样式表从未加载,我不知道为什么。当我单击指向css文件的链接时,它返回403错误,其中包含奇怪的路径,如此

You don't have permission to access      /mysite/C:/AppServ/www/mysite/system/templates/home/css/style.css 

这让我感到困惑,因为此时路径不正确,因为它以网站名称开头,后跟上面模板文件中定义的路径。

无论如何都有解决这个问题的方法吗?

2 个答案:

答案 0 :(得分:3)

将CSS文件加载到网页时,您不需要系统文件路径,而是URL。所以而不是:

<link rel='stylesheet' type='text/css' href='<?= $template_path; ?>/home/css/style.css' />

你需要这样的东西:

<link rel='stylesheet' type='text/css' href='/home/css/style.css' />

或者,如果您定义了基本网址:

<link rel='stylesheet' type='text/css' href='<?= $base_url; ?>/home/css/style.css' />

如果您仍想访问本地文件,请考虑使用file:///协议(不推荐)。

答案 1 :(得分:1)

我认为如果在index.php或init.php中定义“template_url”或“base_url”常量会更好:

define('TEMPLATES_URL','http://localhost/system/templates');

然后在你的html中使用它:

<link rel='stylesheet' type='text/css' href='<?php echo TEMPLATES_URL; ?>/home/css/style.css' />