如何正斜杠“/”在PHP中实际工作?

时间:2015-02-23 13:15:47

标签: php include slash

我对php中的正斜杠如何工作感到困惑。它是否返回Web根目录?还是计算机文件root?或其他什么?

我尝试了几件事,例如,我在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文件也可以相对访问它们。

2 个答案:

答案 0 :(得分:2)

现在我明白了。正斜杠/.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文件回显给网络浏览器。

但是,这将是不同的:

<?php require_once '/includes'; ?>

它将在unix中的/或Windows中的C:中查找。因为.php文件在服务器计算机中工作。这就是为什么最后一个不起作用的原因。服务器根目录中没有/includes目录。所以,为了使其有效,我必须使用它:

<?php require_once $_SERVER['DOCUMENT_ROOT'].'/includes'; ?>

如果我是对的,那就是我的结论。

答案 1 :(得分:0)

  

为什么最后四个例子不起作用? &#34; /&#34;性格应该   返回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');?>