1

我的网站结构是这样的。

HTDOCS 文件夹:/WEB/mysite/htdocs/

管理员文件夹:/WEB/mysite/htdocs/admin/

编辑管理员文件夹:/WEB/mysite/htdocs/admin/edit

HTACCESS 受保护的文件夹:/WEB/mysite/htdocs/admin/flock/

测试文件夹:/WEB/mysite/htdocs/test/

情况 1

以下 script1.php 放置在 Admin 文件夹中:

<?php
require_once 'flock/sql.php' or die("Error");
?>

现在我将 script1.php 包含在位于 Edit admin 文件夹中的 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.

这两种情况是一回事。不是吗?为什么情况二不起作用?

4

2 回答 2

1

相对路径就像相对方向,如果我告诉我向前走两步,向左走一步,如果你每次都从同一个地方开始,你只会在正确的地方结束。php 的起点是主脚本的执行开始的地方。为了让生活更健康,您需要建立几个可以包含的航路点。

一些常见的有:

  1. $_SERVER["DOCUMENT_ROOT"]- 这是您的域根目录(与访问 http://www.mysite.com/相关的文件系统路径)
  2. __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");

希望这可以帮助。

于 2013-05-26T03:52:01.007 回答
0

不,它们不一样。在这种情况下,相对路径基于启动包含链的文件的位置。使用__DIR__常量使路径相对于调用每个包含的文件:

<?php
// will evaluate to /WEB/mysite/htdocs/admin/flock/sql.php always
require_once __DIR__ . '/flock/sql.php' or die("Error");
?>
于 2013-05-26T03:29:31.677 回答