我对正斜杠在 php 中的工作方式感到困惑。它是否返回网络根目录?还是计算机文件根?还是别的什么?
我尝试了几件事,例如,我在 ubuntu 服务器中的文件结构是这样的:
/var/www/html/domainname.com/.
--/config/.
--/core.php
--/images/.
--/includes/.
--/footer.php
--/header.php
--/navigation.php
--/index.php
这是工作(所有这些都包含在index.php
中(:
<img src="/images/logo.png" /> # in header.php
<a href="/">Home</a> # in navigation.php
<a href="/test/test.php">test</a> # in index.php itself
这不起作用:
<?php require_once('/config/core.php'); ?>
<?php include_once('/includes/header.php');?>
<?php include_once('/includes/navigation.php');?>
<?php include_once('/includes/footer.php');?>
为什么最后四个例子不起作用?"/"字符应该返回domainname.com
对吗?或者它返回"/var/www/html/"?
我的目标是将需要包含的所有文件放在includes
目录中。因此,即使.php
文件存储在子目录中,每个.php
文件也可以相对访问它们。
现在我明白了。正斜杠/
在.php
和.html
文档中的工作方式不同。
在.php
文件中,/
表示计算机的根文件夹,/
在Unix中,C:
在Windows中,如Forien在评论中所说的那样。但是,在.html
文件中,/
是指网站或/var/www/html/domainname.com/
的根文件夹。这就是为什么我混淆了lmho。
所以,这段代码:
<a href="/">Home</a>
<img src="/images/logo.png" />
将查找/var/www/html/domainname.com/
即使它是用.php
文件编写的。因为.php
文件将其作为.html
文件发送到浏览器。这个也是如此:
<?php echo '<a href="/">Home</a>'; ?>
上面的这个看起来仍然/var/www/html/domainname.com/
.php
因为文件将其作为.html
文件回显到 Web 浏览器。
但是,这将有所不同:
<?php require_once '/includes'; ?>
它将在 unix 中以/
查找,在窗口中C:
。因为.php
文件在服务器计算机中工作。这就是为什么最后一个不起作用的原因。服务器根目录中没有/includes
目录。所以,为了让它工作,我必须使用它:
<?php require_once $_SERVER['DOCUMENT_ROOT'].'/includes'; ?>
如果我是对的,这就是我的结论。
为什么最后四个例子不起作用?"/"字符应 返回 domainname.com 吧?
错。它从字面上搜索路径/config/core.php
、/includes/header.php
等。
从路径的开头删除/
或添加./
,然后它将从当前工作目录中搜索。您可以使用./
和../
相对搜索文件。
您也可以使用/设置 PHP 配置include_path
。
http://php.net/manual/en/ini.core.php#ini.include-path
并查看日志以更好地理解。 :)
更新:还要检查chdir,这可能对您有所帮助。
chdir('/var/www/html/domainname.com');
<?php require_once('./config/core.php'); ?>
<?php include_once('./includes/header.php');?>
<?php include_once('./includes/navigation.php');?>
<?php include_once('./includes/footer.php');?>