正斜杠“/”在 php 中的实际工作方式


How forward slash "/" actually work in php?

我对正斜杠在 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');?>