我的网站结构是这样的。
HTDOCS文件夹:/WEB/mysite/htdocs/
ADMIN文件夹:/WEB/mysite/htdocs/admin/
EDIT ADMIN文件夹:/WEB/mysite/htdocs/admin/edit
HTACCESS保护文件夹:/WEB/mysite/htdocs/admin/flock/
TEST文件夹:/WEB/mysite/htdocs/test/
情况1
以下script1.php放在Admin文件夹中:
<?php
require_once 'flock/sql.php' or die("Error");
?>
现在我将script1.php包含在编辑管理文件夹中的scripttest.php中:
<?php
require_once '../script1.php' or die ("Error");
?>
它没有任何错误。
情况2
现在我将script2.php放在Test文件夹中:
<?php
require_once '../admin/flock/sql.php' or die("Error");
?>
并从始终位于Edit admin文件夹中的scripttest.php调用它:
<?php
require_once '../../test/script2.php';
?>
它将不再起作用了。这些是错误:
Warning: require_once() [function.require-once]:
Unable to access ../admin/flock/sql.php in /WEB/mysite/htdocs/test/script2.php
on line 2
Warning: require_once(../admin/flock/sql.php) [function.require-once]:
failed to open stream: No such file or directory in /WEB/mysite/htdocs/test/script2.php
on line 2
Fatal error: require_once() [function.require]: Failed opening required
'../admin/flock/sql.php' (include_path='/usr/local/lib/php/:/WEB/mysite/') in
/WEB/mysite/htdocs/test/script2.php on line 2.
这两种情况是一回事。不是吗? 为什么情况二不起作用?
答案 0 :(得分:1)
相对路径就像是相对路线,如果我告诉我向前走两步,向左走一步,如果你每次都在同一个地方开始,那么你只会走到正确的位置。 php的起始位置是主脚本的执行开始的地方。为了让生活更加健康,您需要建立一些相对于您可以包含的航路点。
一些常见的是:
$_SERVER["DOCUMENT_ROOT"]
- 这是您的域根目录(与转到http://www.mysite.com/相关的文件系统路径)__DIR__
- 一个常量,是当前文件的目录。通常最好创建一个常量来建立一个对你的项目有意义的位置......例如。
// site_config.php -- located in a config directory next to your document root.
define("COMMON_INCLUDES", $_SERVER["DOCUMENT_ROOT"]."/includes");
然后,site_config.php将包含在您的所有网页中:
include($_SERVER["DOCUMENT_ROOT"]."/../config/site_config.php");
当您需要资产中的资产时,您会说
include(COMMON_INCLUDES."/header.php");
希望这有帮助。
答案 1 :(得分:0)
不,他们不一样。在这种情况下的相对路径基于启动包含链的文件的位置。使用__DIR__
常量使路径相对于调用每个包含的文件:
<?php
// will evaluate to /WEB/mysite/htdocs/admin/flock/sql.php always
require_once __DIR__ . '/flock/sql.php' or die("Error");
?>