在php中使用includes

在php中使用includes,php,include,dreamweaver,Php,Include,Dreamweaver,我有一个名为header(我的站点的头)的文件。。我在我的所有站点中都使用该文件。问题在于它包含以下内容: include_once("../untitled/sanitize_string.php"); 这意味着可能会抛出错误,具体取决于调用头文件的人 我有目录、子目录和子目录到子目录的子目录。。有没有一种简单的方法来防止这种情况发生。。而不是将satize字符串包含并将其放在每一页上,而不是放在头文件中 Warning: require_once(/untitled/sanitize_st

我有一个名为header(我的站点的头)的文件。。我在我的所有站点中都使用该文件。问题在于它包含以下内容:

include_once("../untitled/sanitize_string.php");
这意味着可能会抛出错误,具体取决于调用头文件的人

我有目录、子目录和子目录到子目录的子目录。。有没有一种简单的方法来防止这种情况发生。。而不是将satize字符串包含并将其放在每一页上,而不是放在头文件中

Warning: require_once(/untitled/sanitize_string.php) [function.require-once]: failed to open stream: No such file or directory in C:\xampp\htdocs\PoliticalForum\StoredProcedure\User\headerSite.php on line 7
致命错误:require_once()[function.require]:在第7行的C:\xampp\htdocs\PoliticalForum\StoredProcedure\User\headerSite.php中打开required'/untitled/sanitize_string.php'(include_path=';C:\xampp\php\PEAR')失败使用绝对路径

include_once('/home/you/www/include.php');

使用yes123所说的绝对路径

include_once(dirname(__FILE__)."/../untitled/sanitize_string.php");

您可以考虑在使用时设置全局。 对于PHP5.3,您可以执行以下操作:

include_once(__DIR__ . '/../untitled/sanitize_string.php');
其中
\uuuu DIR\uuuu
是当前文件的目录

对于旧版本,您可以使用

include_once(dirname(__FILE__) . '/../untitled/sanitize_string.php');
其中
\uuuu文件\uuuu
是当前文件的路径

假设您具有以下结构:

/app/path/public/header.php
/app/path/public/user/profile.php
/app/path/untitled/sanitize_string.php
如果您的
header.php
包含
santitize_script.php
,其相对路径如下:

include_once("../untitled/sanitize_string.php");
php解释器将尝试包含与当前工作目录相对应的文件,因此如果您执行类似
http://localhost/header.php
它将尝试从
/app/path/public/./untitled/sanitize_string.php
中包含它,并且它将工作

但是如果您尝试执行类似
http://localhost/user/profile.php
和profile.php包含header.php,而header.php将尝试包含
/app/path/public/user/./untitled/sanitize_string.php
中的文件,这将不再有效。(
/app/path/public/user
现在正在使用当前工作目录)


这就是为什么在包含文件时使用绝对路径是一种很好的做法。当在
header.php
中使用时,
\uuuuuu DIR\uuuuu
\uuuuu FILE\uuuuuuuu
常量将始终具有相同的值:
/app/path/public
/app/path/public/header.php
,无论
header.php之后将在何处使用
都必须在此处使用绝对路径,相对于相对的。我经常使用旧的服务器变量设置一些常量来表示重要的目录。像这样:

define('MY_DIR',$_SERVER['DOCUMENT_ROOT']./path/to/yer/DIR')

然后,修改include语句:


include_once(MY_DIR./your_file.php')

请发布
sanitize\u string.php
的内容。它很可能包含因缺少变量等而未正确处理错误的代码。这是需要解决的问题。请将其设置为相对于定义的路径,例如网站的文档根目录。我用一个常数来做这个;有几种方法可以确定路径。+1-或者,如果您想避免绝对路径,请使用
header.php
中的常量,并使其与之相对。DIR提供了什么?那么,如果我得到当前目录或文件呢?如果您碰巧知道脚本将始终从Web服务器运行,并且希望管理相对于Web服务器文档根的include路径(这样您就不必调整每个目录的“../”前缀),那么您可以编写相对于GetVar(“document\u root”)的路径我不知道GetVar('Document\u root')做什么,我也不明白这有什么帮助…包括一次(dirname(FILE)。'/../untitled/sanitize\u string.php');因为如果我的文件在同一个目录下,会发生什么事,它会想到进入一个文件夹。这是一个错误..为什么不只使用文档路径?!为什么会发明相对路径?@WithFlyingColors如果你的文件与header.php在同一个目录下,你显然会使用类似于
include\u的语法来包含它(_DIR__.'/untitled/sanitize_string.php'))
如果它在同一个目录中,我可以使用:untitle/sanitize_string.php..为什么需要magic常量..它没有任何用处,也与我的问题无关。我看到的唯一解决方案是,要么像visionary所说的那样更改php.ini中的include_路径,要么小心我如何使用include..因此,如果我在整个站点中使用绝对路径..将我没有问题?我得到这个:ning:include_once(C:\xampp\htdocs\PoliticalForum\StoredProcedure\User/./untitled/sanitize_string.php)[function.include once]:打开流失败:在第7行的C:\xampp\htdocs\PoliticalForum\StoredProcedure\User\headerSite.php中没有这样的文件或目录警告:include_once()[function.include]:无法打开“C:\xampp\htdocs\PoliticalForum\StoredProcedure\User/。/untitled/sanitize_string.php”以包含(include_path=”;C:\xampp\php\PEAR')在第7行的C:\xampp\htdocs\PoliticalForum\StoredProcedure\User\headerSite.php中,这是最好的解决方案,尽管如此,我牺牲了速度。其他人给我的答案与我无关..即使我使用魔法常数,一旦我使用../它会告诉文件进入目录并在那里查找文件..仍然存在异常thrown@WithFlyingColors:使用绝对路径,你没有任何例外为什么每个人都不使用绝对路径而不是相对路径?!绝对路径很脆弱。每次移动文件时,你都必须回到文件中来更改绝对路径。如果你将文档安排在模块化、自包含的结构中,相对路径会更灵活当然,如果你改变模块的位置,你必须更新相对路径。对于一个相当标准的项目,PHP包含路径,就像操作系统路径一样,提供了最灵活的解决方案。嗯……我更喜欢传统的方式和最佳实践,所以我会避开包含路径,而使用绝对路径。我不会移动文件。所以我所需要的只是包含一些文件,比如我为图像或链接的src属性写入路径?如果出于某种奇怪的原因,文件系统的布局也是这样