A. 这是做什么的?
require ("./file.php");
B. 与此相比?
require ("file.php");
(它不是一个目录..这将是)
require ("../file.php");
A. 这是做什么的?
require ("./file.php");
B. 与此相比?
require ("file.php");
(它不是一个目录..这将是)
require ("../file.php");
./
是当前目录。它与 just 基本相同file.php
,但在许多情况下(包括这一点)它不检查 PHP 可能查找文件的任何标准位置,而是仅检查当前目录。
从PHP 文档(注意最后一句话):
首先在相对于当前工作目录的每个 include_path 条目中查找包含文件,然后在当前脚本的目录中查找。例如,如果您的 include_path 是库,当前工作目录是 /www/,您包含 include/a.php 并且该文件中有包含“b.php”,b.php 首先在 /www/libraries/ 中查找,然后在/www/包括/。如果文件名以 ./ 或 ../ 开头,则仅在当前工作目录中查找。
第一个版本强制内部机制包含相对于...直接执行的文件的文件。所以例如你有
索引.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";
简短的回答
你是对的,它不是一个目录。一种 。指您所在的目录,而 .. 指父目录。
意思是,./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
所以真的, ./ 更明确。这意味着,“您要查找的文件必须在此处”,而没有 ./ 表示,“该文件应该在程序查找文件的某个位置”。
点斜杠强制仅在当前目录中找到文件,而不是额外搜索 include_path 设置中提到的路径。
只需告诉 php仅将文件包含在当前目录中,否则如果文件不存在则失败。
如果您使用“indexcommon3.php”格式并且文件不存在,php 会将其搜索到 include_path 系统变量中。
编辑:为了清楚起见,我完全重写了答案
包含文件时,您可以使用./myfile.php
或myfile.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 的“包含路径”。
它明确命名当前目录。