39

A. 这是做什么的?

require ("./file.php");

B. 与此相比?

require ("file.php");

(它不是一个目录..这将是)

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

7 回答 7

48

./当前目录。它与 just 基本相同file.php,但在许多情况下(包括这一点)它不检查 PHP 可能查找文件的任何标准位置,而是检查当前目录。

PHP 文档(注意最后一句话):

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

于 2009-02-23T21:15:20.293 回答
9

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

索引.php

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

第二个.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';

第三个.php

// This is included relatively to second.php ONLY. It does not search
// include_path
return "foo";
于 2009-02-23T21:15:03.150 回答
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/ 等中查找您的文件,但不会在 ./ 或您所在的目录中查找。

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

./myprogram

所以真的, ./ 更明确。这意味着,“您要查找的文件必须在此处”,而没有 ./ 表示,“该文件应该在程序查找文件的某个位置”。

于 2009-02-23T21:21:17.627 回答
5

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

于 2009-02-24T19:46:15.540 回答
4

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

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

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

于 2009-02-23T21:16:48.917 回答
3

编辑:为了清楚起见,我完全重写了答案


包含文件时,您可以使用./myfile.phpmyfile.php

它们不一样,除非您知道自己在做什么,否则您最好始终使用第一种语法。

最好用一个例子来说明差异:假设您有以下文件和文件夹结构:

index.php
inc/inner.php

从 index.php 中,您可以包含不带“./”的内部模板,它将按预期工作:

# index.php
<?php
include "inc/inner.php";

现在假设我们添加了一个新文件,所以文件夹结构现在是这样的:

index.php
inc/inner.php
inc/inner-inner.php

要包含inner-inner.php在 中inner.php,我们会这样做……对吗?

# src/inner.php
<?php
include "inner-inner.php";

错了index.php只会inner-inner.php在根文件夹中查找 *。

index.php
inc/inner.php
inc/inner-inner.php
* inner-inner.php <- Doesn't exist, PHP ERROR.

相反,我们应该使用./包含inner-inner 的语法。这将指示我们包含的文件必须相对于当前文件包含在内,而不是相对于 PHP 脚本的当前“入口点”

# src/inner.php
<?php
include "./inner-inner.php";

此外,正如其他评论中提到的,如果您为 PHP 应用程序配置了不同的“加载路径”,则将首先查找该加载路径,而不使用./语法。相反,./语法更有效,因为它不检查 php.ini 的“包含路径”。

如果您想让您的包含更加明确,请使用__DIR__常量。这告诉 php:“打印此文件所在的当前目录”。

# src/inner.php
<?php
include __DIR__ . "/inner-inner.php";

TLDR;始终使用./or__DIR__因为它是相对于工作目录的,并且不依赖于 php 的“包含路径”。

于 2018-06-05T17:35:41.087 回答
0

它明确命名当前目录。

于 2009-02-23T21:16:09.060 回答