无论父文件的路径如何,如何加载站点资源

时间:2015-01-28 16:22:29

标签: php

我非常熟悉WordPress,并且是这个CMS的粉丝。所以我已经习惯了包含get_header()文件的header.php函数。但是现在我正在开发一个原始的PHP项目,我也希望在这里也有类似的方便。我设计了一个如下文件夹结构:

project/
       css/
            bootstrap.css
       js/
            jquery.js
            project.js
       inner-folder/
            some-page.php
       header.php
       index.php
       footer.php
       style.css

我创建了一个自定义函数is_page(),就像WordPress一样,可以加载特定于页面的项目。我的header.php包含的所有内容都正常工作:

<html>
   <head>
      <link rel="stylesheet" href="css/bootstrap.min.css">
      <link rel="stylesheet" href="style.css">
   </head>
<body>
...

我的footer.php包含:

      ...
      <script src="js/jquery.js"></script>
      <script src="js/project.js"></script>
   </body>
</html>

我的index.php包含:

<?php require_once( 'header.php' ); ?>
   ...
<?php require_once( 'footer.php' ); ?>

一切都运转得很好,直到...
我开始研究inner-folder/。在some-page.php我使用了与index.php相同的代码,您可以猜到,所有的CSS和JS文件链接都被破坏了。

如何创建一个函数或类似的东西,以便在我的project文件夹的任何位置(在任何子目录或子子目录中),我可以加载任何资源而不会有任何阻碍?它也应该是精通业绩的。

3 个答案:

答案 0 :(得分:0)

如果您有权访问php.ini文件,并假设您正在运行Apache 2并且可以访问Apache配置文件,则可以编辑这些文件以解决您的问题。

第1步:编辑Apache配置

您需要将Apache配置中的目录和文档根目录设置为Web项目文件夹的路径。我假设已经完成,因为您已成功运行PHP。如果没有,请查看this question

第2步:编辑PHP配置

PHP配置中有一个设置php.ini,允许您设置包含文件时PHP引擎将查找的路径。

;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;

; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"
;
; PHP's default setting for include_path is ".;/path/to/php/pear"
; http://php.net/include-path

this question图表)

如果您无法访问PHP配置或不想更改它,您可以随时使用[set_include_path][3]功能,它基本上可以在脚本中执行相同操作

完成上述两个步骤后,您可以按如下方式包含文件:

非PHP资源,如CSS,JavaScript等: /path/to/css

PHP资源: path/to/php

请注意非PHP资源的前导斜杠,并且没有PHP资源的前导斜杠。

答案 1 :(得分:0)

好的,我找到了一个最可靠的解决方案:HTML <base>标记 -

<html>
    <head>
        <base href="http://example.com/">
        <link rel="stylesheet" href="css/bootstrap.min.css">
        <link rel="stylesheet" href="style.css">
    </head>
<body>
...

<强>来源:
http://www.w3schools.com/tags/tag_base.asp

答案 2 :(得分:-1)

使用包含菜单时遇到了同样的问题,因此我不必更改每个页面上的菜单。

所以我硬编码了网址:

<?php require_once('//domain.com/header.php'); ?>