为什么要在 include 或 include_once 语句中使用 dirname(__FILE__) ?

2024-03-01

我见过这个:

<?php
  include( dirname(__FILE__) . DIRECTORY_SEPARATOR . 'my_file.php');
?>

为什么我需要这样做?为什么我要麻烦地获取目录名,然后将其与目录分隔符和新文件名连接起来?

上面的代码不等于:

<?php
  include( 'my_file.php' );
?>

??

PHP 文档 http://php.net/manual/en/function.include.php says,

根据给定的文件路径包含文件,如果未给出,则根据指定的 include_path 包含文件。如果在 include_path 中找不到该文件,include() 最终会检查调用脚本自己的目录以及失败之前的当前工作目录。如果 include() 构造找不到文件,它将发出警告;这与 require() 的行为不同,后者会发出致命错误。


假设我有一个(假的)目录结构,例如:

.../root/
        /app
            bootstrap.php
        /scripts
            something/
                somescript.php
        /public
            index.php

现在假设bootstrap.php包含一些用于设置数据库连接或其他类型的引导程序的代码。

假设您想将文件包含在boostrap.php的文件夹名为init.php。现在,为了避免扫描整个包含路径include 'init.php',你可以使用include './init.php'.

但有一个问题。那./将与包含的脚本相关bootstrap.php, not bootstrap.php。 (从技术上讲,它将相对于工作目录。)

dirname(__FILE__)允许您获取绝对路径(从而避免包含路径搜索),而不依赖于工作目录是其中的目录bootstrap.php居住。

(注意:从 PHP 5.3 开始,您可以使用__DIR__代替dirname(__FILE__).)

现在,为什么不直接使用 include'init.php';?

尽管一开始很奇怪,.不保证位于包含路径中。有时为了避免无用stat()当人们很少在同一目录中包含文件时,他们将其从包含路径中删除(当您知道包含永远不会存在时,为什么要搜索当前目录?)。

注意:这个答案的大约一半是在一篇相当旧的帖子中的地址:require(dirname(__FILE__).'/'.'myParent.php') 比 require('myParent.php') 更好吗? https://stackoverflow.com/questions/2220443/whats-better-of-requiredirname-file-myparent-php-than-just-require

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么要在 include 或 include_once 语句中使用 dirname(__FILE__) ? 的相关文章

  • PHP 相对于 ASP.NET 有什么优势? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Eclipse 和 Zend 调试器总是在第一行中断,尽管未选中该选项

    我取消选中了在第一行中断PHP 调试配置中的选项 但无论如何它仍然在第一行中断 我怎样才能防止这种情况发生 我正在使用 MacOSX Eclipse PDT 3 0 2 和 Zend 调试器 经过大量谷歌搜索后 我找到了如何解决这个问题 可
  • json支持阿拉伯字符吗?

    我想问一个简单的问题 json 是否支持阿拉伯字符 我的意思是当我搜索类似以下内容时 values database gt get by name echo json encode array returnedFromValue gt va
  • 如何?使用 PHP API 提交亚马逊创建配送订单 XML

    我现在正在努力使用 Amazon API 我正在尝试创建履行订单 将订单发送到亚马逊以供他们履行 我首先需要创建我使用过的文档 的XMLhttp www jyi org wp content uploads Amazon xml pdf h
  • 文件再次获取内容不起作用替代方案

    我尝试了curl 因为file get contents在php中不起作用 任何人都可以给我解决方案 所以使用curl解决它 这里是代码 userData json decode file get contents https graph
  • Facebook 墙写应用

    我想知道我是否可以编写一个应用程序 它可以是我所有朋友的列表 只需在我选择的朋友的墙上发布一条消息即可 不是消息 而是墙上的帖子 所以看来我去了他们的墙并写了一条消息 他们不知道有一个应用程序正在向他们推送消息 也可以用 python 编写
  • “stream_socket_enable_crypto():对等证书 CN=`gains.nanosupercloud.com' 与共享托管中预期的 CN=`smtp.sendgrid.net' 不匹配”

    我在 laravel 从事邮件工作 我有以下配置 MAIL DRIVER smtp MAIL HOST smtp sendgrid net MAIL PORT 587 MAIL USERNAME MAIL PASSWORD MAIL ENC
  • 从逗号分隔的字符串中删除项目[重复]

    这个问题在这里已经有答案了 假设我有一个字符串 cat mouse dog horse 是否有正则表达式或函数可以按如下方式工作 1 cat return string gt mouse dog horse 2 mouse return s
  • 如何从外部域设置 iframe 内部的样式?

    我有一个网站 其中嵌入了来自 3 个不同域的 3 个 iframe 每个 iframe 都位于单独的页面上 将样式表应用于所有 3 个 iframe 的最佳方法是什么 谢谢你 这可以在某些网站上完成 但由于 同源政策 而并非全部 Twitt
  • 让 PHPUnit 忽略一些事情?

    我有一个 PHPUnit 测试类 我希望在测试运行中忽略它 我知道我可以通过重命名它来做到这一点 以便它的文件名中不包含 测试 一词 但我不想这样做 因为它比我想要的更混乱了源代码控制水域 有人有建议吗 有几个选项phpunit命令可以帮助
  • Symfony2:间歇性高响应时间/缓慢 SessionHandlerProxy::read() 完成

    我看到来自 Symfony2 会话管理器组件的非常奇怪的行为 特别是 SessionHandlerProxy read 函数在我的生产环境中有时会非常慢 Symfony Component HttpFoundation Session St
  • 带有 ajax 提交处理程序的 jquery 验证插件不起作用

    在过去的几天里 我已经多次使用了 jquery 验证插件 但尚未将其与 ajax 提交一起使用 我所拥有的在下面被削减为两个字段 提交时值没有错误 单击提交按钮时不会发生任何提交 它只是什么都不做 HTML
  • PHP Define() 似乎不能与 include() 一起使用

    我一直在尝试 OO PHP 目前拥有三个文件 我有一个 class lib php 目前它只有一个databaseServer 类 一个index php 文件和一个definitions php 文件 我想将所有敏感数据库信息放入定义文件
  • 如何跨页面播放背景音乐

    我已经读过这个问题 我知道它只能用框架来完成 我真的不想要全站点 AJAX 如何在多个 HTML 页面上播放背景音频 https stackoverflow com questions 4210370 how to play a backg
  • 如果 CodeIgniter 方法不存在,则重定向到默认方法。

    我正在使用 CodeignIter 并且正在寻找一种在被调用方法不存在时为单个控制器编写自定义处理例程的方法 假设你打电话www website com components login In the components控制器 没有一个方
  • 在 Woocommerce 结帐中启用特定状态的交货时间选项

    基于 在 WooCommerce 结帐中添加自定义复选框 其值显示在管理员编辑订单中 https stackoverflow com questions 45905237 add a custom checkbox in woocommer
  • 使用PHP将大文件上传到谷歌云存储

    我正在尝试将大文件从服务器上传到云存储 文件超过 500mb 但 PHP 超时 我尝试查看 Google 客户端库文档 并在 stackoverflow 中进行爬行 但找不到任何可以帮助我的内容 还有有什么办法可以跟踪上传进度吗 这是我目前
  • Laravel 自定义授权

    我在这里进行登录验证 LoginData Input except array token if Auth attempt LoginData return success 我的表不同 所以这里我更改表名称auth php table gt
  • 解决 php 常见冲突的最佳方法:忽略、修复还是其他?

    我正在尝试在 CentOS 6 上的 PHP 5 3 3 上安装 Soap 模块 来自 webtatic PHP 5 6 当我运行 yum 命令时yum install php56w soap要安装它 我收到以下消息 错误 php56w c
  • npm run dev 和 npm run production 之间的区别

    我对 Laravel 和 vue js 很陌生 请让我知道它们之间有什么区别npm run dev and npm run production 这和环境有关系吗 npm run dev创建源映射并且不会缩小 js css 这使得调试和查找

随机推荐

  • ListView获取滚动位置?

    我正在使用 MergeAdapter 来自 Mark Murphy 的优秀项目系列 您可以将它与 ListView 一起使用 我试图在刷新时重建适配器的内容 而不是 就地 刷新并调用notifyDataSetChange 我想获取列表视图的
  • 在 R data.table 中,如何将变量参数传递给表达式?

    我遇到了一个 R 小问题data table 非常感谢您的帮助 我该怎么做呢 getResult lt function dt expr gby e lt substitute expr b lt substitute gby return
  • 使用 Excel VBA 重命名文件

    这就是我需要做的 我在 Excel 工作表中有这两列 带文件名 第一列包含当前文件名 第二列包含我想要将文件重命名为的名称 我需要使用它 因为重命名没有模式 例如 下面可能是一组文件 Current Name gt Rename To Ab
  • Scala中如何从内部类引用外部对象

    考虑这段代码 这是一种类型安全单元 abstract class UnitsZone type ConcreteUnit lt AbstractUnit abstract class AbstractUnit val qty Int SOM
  • simplexml_load_file 不起作用

    我下面有这段代码 它在我的远程托管服务器上运行良好 但由于某种原因不能在我的本地 Linux 机器上运行 我也尝试使用 file get contents 来获得宁静的服务 但它也返回 false 有谁知道为什么会发生这种情况 谢谢 xml
  • 使用“devtools::install_github”和克隆 GitHub 存储库有什么区别?

    I used devtools install github 在 R 中安装存储库 并使用以下命令安装了存储库git clone在终端 这两条路线有什么区别 到目前为止 我明白我可以使用library package 在 R 中 并将加载该
  • Angular 5中如何从父组件继承子组件中的CSS样式

    我有一个父组件 其中有一个子组件 父组件有一些 css 类 子组件扩展了它们 我尝试使用 host 查看文档 但似乎无法使其正常工作 子组件 div class table row body div class table cell bod
  • 对指针数组进行排序

    我是否正确地认为 为了对指针数组进行排序 将指针视为 int 是可以的 例如 qsort ptrs n sizeof void int cmp 我想对 ptr 进行排序以确定是否存在重复项 而不管指针指向的类型是什么 因此 qsort 是执
  • 如何调用shell脚本来启动后端Java进程?

    完成 Jenkins 任务后 我使用 Jenkins 的后置条件配置部分执行 Linux shell 脚本 这个 Linux shell 脚本想要在后端启动备用服务 并且不能导致 Jenkins 暂停 我尝试使用 nohup 等 但不起作用
  • 3D 数组作为纹理在 CUDA 中写入和读取

    由于我正在编程的算法的性质 我需要用一些特定的数学写入 填充 3D 矩阵 然后从该矩阵 在单独的内核中 读取作为 3D 线性插值纹理 由于纹理是一种读取模式 我假设我可以以某种方式在绑定到纹理的全局内存中写入 并从中单独读取 而不需要双倍内
  • 如何制作一个在主线程中触发事件的 C# 计时器?

    长话短说 我需要 Net 中的一个精确计时器 精度以毫秒为单位 这意味着 如果我告诉它在 10 毫秒过去时触发一个事件 它必须这样做 1 毫秒 内置的 Net Timer 类的精度似乎为 16ms 这对于我的应用程序来说是不可接受的 我找到
  • 避免使用元类继承生成的类属性

    我正在考虑使用元类自动将子类添加到父类以进行 链接 然而 从父类继承这些属性会把事情搞砸 有什么好的方法可以避免这种情况吗 class MetaError type def init cls name bases attrs for bas
  • 尽管提示没有任何价值,但谷歌身份验证始终要求授权

    从 Google OAuth 连接用户后 当该用户希望在需要选择其 Google 帐户的下一个会话期间重新连接时 将再次请求许可 根据文档 https developers google com identity protocols Ope
  • 删除包含子实体的实体时出现微风错误

    我使用 Entity Framework Code First Durandal Breeze 从事一个项目 我有这些实体模型 public class Packing Key public int Id get set public st
  • Xcode 7 UI 测试,录制按钮呈灰色

    我正在尝试使用 Xcode 7 将 UI 测试添加到我现有的项目中 但是 UI 测试记录按钮始终呈灰色 我在这里缺少什么 我尝试重新启动 Xcode 清理并重建项目并添加新的 UI 测试目标 还有其他人经历过同样的行为吗 要启用红色按钮 您
  • 这个 LogCat 错误是什么意思?

    我正在尝试运行 E3roid 示例的示例 除非我这样做 否则我会强制关闭页面 这是 logcat 错误 通过查看 您能告诉我这是什么意思以及问题出在哪里吗 02 28 20 31 51 429 D AndroidRuntime 1779 S
  • 将数字格式化为特定的 QString 格式

    我有一个关于将十进制数格式化为某种 QString 格式的问题 基本上 我的程序中有一个可以接受任何值的输入框 我希望它将这个框中的值转换为格式 05 30 基于该值 该值将限制为 99 99 一些例子包括 2 gt 00 02 1 5 g
  • 什么时候必须在模块中使用 CONTAINS?

    我定义了以下模块 module data model 2 implicit none TYPE DEFINITION type type1 record integer month integer day integer year inte
  • 禁用右键对安全性有影响吗?

    在银行网站或其他网站上 我看到他们禁用了右键单击 禁用右键单击是否会使站点在客户端方面更加安全 这是一个好的一般做法吗 不 禁用网站中的右键单击是不好的 详情请点击下方 http www sitepoint com dont disable
  • 为什么要在 include 或 include_once 语句中使用 dirname(__FILE__) ?

    我见过这个 为什么我需要这样做 为什么我要麻烦地获取目录名 然后将其与目录分隔符和新文件名连接起来 上面的代码不等于 PHP 文档 http php net manual en function include php says 根据给定的