【问题标题】:Include path in PHP and HTML [duplicate]在 PHP 和 HTML 中包含路径 [重复]
【发布时间】:2026-01-13 13:10:01
【问题描述】:

我在构建小型网站时遇到了 PATH 问题。该站点由不同文件夹中的一些标准页面和名为 _include 的文件夹中的其他一些页面组成。我现在在每个页面上都包含三个文件 - menu.php、header.php 和 footer.php - 所有三个文件都包含在文件夹 _include 中。我已经使用了 set_include_path 并且就 PHP 而言它工作得很好。但是,在涉及 HTML 时存在问题。在 header.php 文件中我有这个语法<img src="_pics/header.png" width="XXX" height="YYY" />

只要包含 header.php 的所有文件都在同一目录中,代码就可以正常工作并且图片会加载。但是如果我尝试将它包含在子目录中的页面中,那么图片不会加载,这很明显,因为目录级别现在已经改变。

所以我的问题是如何解决这个问题,以便 HTML 路径在包含的 PHP 文件中工作,无论它们放在网站的什么位置?

【问题讨论】:

    标签: php html path


    【解决方案1】:

    最简单的解决方案是始终使用相对于 web-root 的资产的绝对路径:

    <img src="/_pics/header.png" width="XXX" height="YYY" />
              ^ absolute path
    

    这适用于图像、javascript 文件、css 文件等所有内容。

    现在,您的包含文件的位置无关紧要,甚至可能位于网络根目录之外。

    【讨论】:

    • 不会改变任何事情。它仍然试图找到相对于我所在路径的图片。如果我在根级别它可以工作,但如果我往下一层它就找不到图片,因为它现在试图在“subdir/_pics”中找到它" 代替。
    • @Sandokan 不,当 php 使用这样的路径生成 html 时,浏览器会在加载 html 后立即尝试从您的网络服务器定位 /_pics/header.png。您包含的位置和图像的位置没有任何关系。
    • 好吧,不管是什么问题,它仍然不起作用。结果相同。根目录中的页面可以很好地加载图像。任何其他文件夹中的页面都不会 - 它们会给出 404 错误。
    • @Sandokan 您能否将其中一个不起作用的页面的 html 以及未在该 html 中加载的图像的完整 url 添加到您的问题中?
    • 这是正确的答案。如果你这样做,它肯定不会尝试找到相对于文件位置的图像。
    【解决方案2】:

    如果您的路径是静态的,您可以使用 php document_root 或 server_name 变量。

    <?php echo "<img src=\"http://".$_SERVER['SERVER_NAME']."/_pics/header.png\" width="XXX" height="YYY" />"; ?>
    <?php echo "<img src=\"".$_SERVER['DOCUMENT_ROOT']."/_pics/header.png\" width="XXX" height="YYY" />"; ?>
    

    如果您的页面被移动,但您需要在此代码中对其进行更改以反映新位置。

    【讨论】:

      【解决方案3】:

      使用完整路径,例如:http:// domain_name/path 。这可能就是您要查找的内容。

      【讨论】:

        【解决方案4】:

        您必须了解absolute and relative URL 之间的区别。

        代码工作正常,只要所有文件加载图片 包括 header.php 位于同一目录中。但如果我尝试 将其包含在子目录中的页面中,然后图片不会加载,这 很明显,因为现在目录级别已经改变了。

        <img src="_pics/header.png" width="XXX" height="YYY" />
        

        当您尝试包含在子目录中时它是如何映射的-

        &lt;img src="subdir/_pics/header.png" width="XXX" height="YYY" /&gt;

        如您所知,图片未放在subdir 下,因此图片未加载。

        在这种情况下,您必须使用以http:// 开头并以picname.png 结尾的绝对 URL。

        【讨论】:

        • 现在不确定,但你不是声称与 jeroen 所说的相反吗?
        • @Sandokan:我从来没有说过我是对的,你应该自己尝试一下
        • 您的声明似乎更准确,因为它现在只适用于一个文件夹。
        • 您不需要使用带有 http|https(或端口)的完整绝对 URL,只需一个 / 开头即可。请参阅@jeroen 的回答。
        • 正如我所说,添加一个 / 不会改变任何东西。