2012-11-22 121 views
1

构建小型网站时遇到了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" />在PHP和HTML中包含路径

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

所以我的问题是如何解决这个问题,使HTML路径在包含的PHP文件中工作,而不管他们在网站上的位置?

回答

4

最简单的方法是始终使用绝对路径,相对于Web根资产:

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

这适用于如图像,JavaScript文件,CSS文件中的所有的东西,等

现在包含文件的位置并不重要,甚至可能位于Web根目录之外。

+0

不改变事物。它仍然试图找到相对于我所在路径的图片。如果我处于根级别,它可以正常工作,但是如果我下了一级,它将无法找到图片,因为它现在试图在“subdir/_pics”中找到它“而是。 – Sandokan

+0

@Sandokan不,当php用这样的路径生成html时,浏览器一旦加载了html,就会尝试从您的web服务器中定位'/ _pics/header.png'。包含的位置和图像的位置没有任何关系。 – jeroen

+0

好吧,无论问题是什么,它仍然不起作用。同样的结果。在根目录中的页面加载图像很好。任何其他文件夹中的页面不 - 他们给404错误。 – Sandokan

-1

如果你的路径是静态的,你可以使用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" />"; ?> 

如果您的网页被移动了,但您需要在此代码中更改它以反映新的位置。

-1

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

0

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

只要包含header.php的所有文件 位于同一目录中,代码就能正常工作并且图片加载。但如果我尝试 将其包含在子目录的页面中,则图片无法加载,其中 非常明显,看到目录级别现在已经发生变化。

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

当您尝试在子包括它是如何映射目录 -

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

正如你所知道的图片是不是subdir因此图片不加载之下。

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

+0

现在还不确定,但你不是在声称jeroen说什么的反驳吗? – Sandokan

+0

@Sandokan:我从来没有说过我是正确的你可以自己试试 –

+0

你的声明似乎更准确,因为它现在只能从一个文件夹中运行。 – Sandokan