【问题标题】:How forward slash "/" actually work in php?正斜杠“/”如何在 php 中实际工作?
【发布时间】:2015-04-24 19:55:57
【问题描述】:

我对正斜杠在 php 中的工作方式感到困惑。它是否返回网络根目录?还是电脑文件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文件都可以相对访问。

【问题讨论】:

  • 相对于当前运行的脚本,加一个..
  • 那么,在index.php 的情况下,它会像那样返回/var/www/html/
  • 不,只需检查您的include_path 设置,如果您以/ 开头,它将开始查看include_path 设置。在您的情况下,它的 ../ 从您的脚本运行的位置移回一级
  • @BagolDaplun / 始终是 // 是根文件夹。对于 UNIX 操作系统,它.../!对于 Windows,它通常是 C:,但有时 apache 会返回您的访问文件夹。可以肯定的是,始终使用相对路径。

标签: php include slash


【解决方案1】:

为什么最后四个示例不起作用? “/”字符应该 返回 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');?>

【讨论】:

【解决方案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'; ?>

如果我是正确的,这就是我的结论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 2011-12-22
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    相关资源
    最近更新 更多