我肯定我错过了一些简单的解释,但我想确认一下-所以假设我知道的很少。
我的目录结构是这样的(暂时):
我的主站点(测试服务器上的localhost/project/,硬盘上的C:/xampp/htdocs/project)包含以下文件和文件夹:
Root
graphics
variousgraphics.png
support
stylesheet.css
templates
header.php
footer.php
initialize.php
you
default.php
index.php
anotherfile.php
直到我创建文件夹'you'一切都很好,即我包含了初始化文件index.php作为<?php include(templates/initialize.php) ?>
但是当我决定使用上面的方法为default.php文件(在'you'内部)包含initialize.php时,它错误地显示了Warning: include(templates/initialize.php) [function.include]: failed to open stream: No such file or directory in C:'xampp'htdocs'photoquilt'you'default.php
所以我很自然地添加了../
来创建<?php include(../templates/initialize.php) ?>
,但当然这不起作用,因为在initialize。php中引用的文件没有以同样的方式添加,所以我到了这里。
对我来说值得注意的是,$_SERVER['document_root']
的回声导致C:/xampp/htdocs
总结一下:
是否有任何方法来确保所有的链接/路径工作正确,而不管原始路径是从哪里来的?
在default.php中你可以定义一个像
这样的常量define('ROOT_PATH', dirname(__DIR__));
或5.3.0之前的PHP版本
define('ROOT_PATH', dirname(dirname(__FILE__)));
,然后在所有脚本中使用ROOT_PATH
来构建文件路径。
看到
——http://docs.php.net/language.constants.predefined
——http://docs.php.net/dirname
据我所知,这里有几个问题:服务器端和客户端。
至于PHP,你做得很好。通过相对路径(../templates/initialize.php
)引用文件是一种方法。还有另一种方法可以实现相同的功能,但我不推荐这样做:编辑include_path以添加项目的根目录。您可以在根目录下的.htaccess
中执行此操作,例如:
php_value include_path ".:/path/to/your/project:/usr/local/lib/php"
对于HTML部分(未加载图像,未找到样式表),您可以设置一个基础href:
<base href="http://path.to.your/in-server/" />
base href应该指向目录的根目录。然后,HTML中的所有图像、样式表等必须固定为使用来自项目根目录(graphics/variousgraphics.png
)的相对uri。