好吧,我一直在为这个看起来像现在这样的人撕掉我的头发,似乎每个答案(无论是在国内还是在国外)要么不起作用,要么措辞混乱。我对PHP比较陌生,我确信我错过了一些简单的解释,但我想确认 - 所以假设我知之甚少。
我的目录结构如此(暂时):
我的主站点(我的测试服务器上的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
直到我创建文件夹'你'一切都很好,即我将index.php的初始化文件包含为<?php include(templates/initialize.php) ?>
但是当我决定使用上面的方法为default.php文件(在'你'里面)包含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
有没有办法确保所有链接/路径都能正常工作,无论原始路径来自哪里?
答案 0 :(得分:1)
在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
答案 1 :(得分:1)
据我所知,这里有几个问题:服务器端和客户端。
至于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/" />
基本href应指向目录的根目录。然后必须修复HTML中的所有图像,样式表等,以使用项目根目录中的相对URI(graphics/variousgraphics.png
)。