当资源路径是相对的时,不可能使用include函数

时间:2016-07-27 03:06:07

标签: php html css

背景:我目前对PHP很新,并且动态生成内容,我正在使用PHPStorm并使用XAMPP的PHP解释器和PHPStorm的内置Web服务器。

问题:我最近学会了非常方便的函数<img alt="Logo" title="Logo" src="img/brand/Logo.png">,我现在动态地包括我:头部内容,导航和页脚。当我在根目录中的index.php中执行此操作时,这很有效,因为我在导航和脚本路径中使用相对路径来处理图像。

但是,当我为新页面(目录)创建一个文件夹,例如'article',然后我在那里使用相同的include函数创建一个index.php时,使用相对路径的资源将无法使用来源他们的文件,因为我现在深度为1目录,并且从我包含的文件中指定了相对路径?

例如在我的navigation.html中我有app.controller('MainCtrl', function($scope , appService) { $scope.name = 'World'; $scope.appList = appService.getAppList(); $scope.modifyAppList = function(){ console.log("After modification: ") appService.modifyAppList(); var testList = appService.getAppList(); $scope.appList = appService.getAppList(); console.log("After modification, and calling getList() : ", testList) } }); 这将在服务器的根目录中工作,因为路径是正确的,但是文档中包含的文档在文件夹的下方不会。

有人可以解释在使用包含导航时的最佳做法,我唯一能想到的是复制我所包含的库并创建一个具有相对路径的集合,这些路径返回+1目录以便在页面上使用必须在文件夹中

2 个答案:

答案 0 :(得分:1)

PHP使用相对于本地服务器计算机的路径,而HTML使用相对于网站的路径。关于在运行时如何定义这些内容存在根本区别。

PHP

如果您使用的是PHP,那么您应该养成 NOT 的习惯,使用相对路径 ,但要使用绝对路径,这将保证每次都成功(只要目标文件存在且可以访问,等等。)。

如此;使用$_SERVER['DOCUMENT_ROOT']

作为旁注,您需要为include s / require使用括号,它只是为服务器提供更多工作而不需要额外的工作效益。

$_SERVER['DOCUMENT_ROOT']是PHP / Web应用程序的基本目录,通常是文件夹public_html/的内容。

HTML

HTML也使用文档生根,但有一种更简单的方法来引用它们每次都输入一个PHP $_SERVER变量。

在HTML中引用其他文件/媒体时,您应避免文档相对路径,而应将每条路径设置为网站根目录相对,这很容易通过使用斜杠(/)启动每个文件/图像请求,指示浏览器应从基本HTML目录开始查找。

档案: logo.png
位置: www.site.com/images/logo.php

www.site.com/greatholidays/index.php到达文件意味着您需要../images/logo.png但是在PHP中包含一些引用此文件的HTML(例如标题包含)将意味着此调用无法在www.site.com/index.php页面;因此,只需在每个引用调用之前加上斜杠:

../images/logo.png ==> Becomes ==> /images/logo.png
                                 ^^^
                       Tells the browser to look from the base directory. 

实施例

  • 包含的文件: /public_html/inc/nav.php

     <a href="/index.php">Home</a>
     <a href="/cabbages.php">My Collection of Giant Cabbages</a>
     <a href="/horse/whyIlovehorses.php">Why I love horses</a>
    
  • 文件包含来自: www.site.com/index.php /public_html/index.php < / p>

     <html>
         <body>
         <main>
             <nav>
             <?php include $_SERVER['DOCUMENT_ROOT']."/inc/nav.php"; ?>
            </nav>
         </main>
        ...
    

    在上面的示例中,从PHP调用nav.php文件的位置或显示HTML输出的位置无关紧要,nav元素中引用的链接将始终到达相同的位置。

答案 1 :(得分:0)

实现这一目标的最简单方法是使用根相对路径。如果你开始使用&#34; /&#34;它被读取为相对于根目录。因此,在mywebsite.com上,链接到&#34; /folder/file.php"将永远转到&#34; mywebsite.com/folder/file.php"无论当前页面有多少个文件夹。

这适用于服务器上的实时网站。我努力解决的问题是我的本地XAMPP设置(我的测试服务器)和域名尚未生效的共享主机设置失败,因为在这两种情况下服务器都将根目录映射到错误的地方,但在现场,它完美地解决了你的问题。