dot-slash对PHP的作用包括调用?

时间:2009-02-23 21:11:20

标签: php url include relative-path

一个。这是做什么的?

require ("./file.php");

B中。与此相比?

require ("file.php");

up-one-directory ..这将是

require ("../file.php");

7 个答案:

答案 0 :(得分:47)

./当前目录。它与file.php大致相同,但在许多情况下(包含此内容),它不检查PHP可能查找文件的任何标准位置,而是仅检查 当前目录

PHP documentation(注意最后一句):

  

首先在每个相对于当前工作目录的include_path条目中查找包含文件,然后在当前脚本的目录中查找。例如。如果你的include_path是库,当前的工作目录是/ www /,你包括include / a.php,那个文件中包含“b.php”,b.php首先在/ www / libraries /中查找,然后在/中WWW /包含/。如果filename以./或../开头,则仅在当前工作目录中查找。

答案 1 :(得分:8)

第一个版本强制内部机制相对于...直接执行的文件包含文件。所以例如你有

<强>的index.php

// directly executed script (php -f index.php or from a browser)
include 'second.php';

<强> second.php

// This is included relatively to index.php
// Actually, it is first searched relatively to include_path, then relatively
// to index.php
include './third.php';

<强> third.php

// This is included relatively to second.php ONLY. It does not search
// include_path
return "foo";

答案 2 :(得分:6)

简答

你是对的,它不是一个目录。一个 。指的是您所在的目录,而..指的是父目录。

含义,。/ file.php和file.php在PHP中功能相同。这是相关的文档页面: http://us.php.net/manual/en/wrappers.file.php

更长的答案

然而,仅仅因为它们在这种情况下的工作方式相同并不意味着它们总是相同的。

当您在* nix shell环境中操作并键入可执行文件的名称时,shell将查找PATH目录,但它不会查找CWD或您查找的目录目前在。

因此,如果您所在的目录中有一个名为myprogram.php的文件(这将是一个PHP CLI文件),您只需输入:

myprogram.php

程序是否可执行无关紧要。 shell将在/ bin /,/ usr / bin / etc中查找您的文件,但它不会查找./或您所在的目录。

要在不将目录添加到PATH的情况下执行该程序,您需要键入

./myprogram

所以真的,。/更明确。这意味着,“你正在寻找的文件就在这里”而没有./表示“该文件应该是程序寻找文件的地方”。

答案 3 :(得分:5)

点斜杠强制仅在当前目录中找到文件,而不是另外搜索include_path设置中提到的路径。

答案 4 :(得分:4)

只是告诉php将文件包含在当前目录 中,或者如果文件不存在则失败。

如果使用格式“indexcommon3.php”并且文件不存在,php会将其搜索到include_path系统变量中。

供参考,您可以使用http://www.php.net/manual/en/function.include.php

答案 5 :(得分:0)

它明确命名当前目录。

答案 6 :(得分:0)

我今天注意到了一些不同。

假设您在 index.php 中添加了一个文件。

<?php
include "./inc/head.php";
// right now, with the current code, this would work as well:
// include "inc/head.php";

tldr aclaration :使用“./”速度要快得多,因为它不会先在其他文件夹中搜索..

但现在我可以说我想要包含 inc/functions.php 这个文件。

因为我会在每个有“头”的地方都包含这些功能,所以我会直接将该文件包含在 inc/head.php 中。

<?php
// Wouldn't it be logical here to do this?
include "./functions.php";

问题是,由于脚本开始的文件实际上是index.php而不是inc/head.php,因此该脚本会失败,因为它会尝试查找一个文件不存在:与functions.php在同一目录中名为index.php 的文件。

[+] inc/
  \_ [.] functions.php <- We want to include this...
   _ [.] head.php      <- ...from this file
[.] index.php
 x  functions.php <-- Not this! (doesn't exist)

因此,我们有两种选择,而不是使用“./”sintax:

  • 使用以下代码包含文件:include "./inc/functions.php";
  • 使用以下代码包含文件:include "functions.php"

因此,在这种特殊情况下,“./”实际 是否重要,因为它会大大改变脚本的行为方式。

希望这是澄清。

TLDR;使用“./”将始终相对于执行初始化的文件,而不使用任何内容(“”)将相对于include_path,之后,相对于当前文件的目录