我到处搜索,得到了很多不同的解决方案和包含信息的变量,以获得绝对路径.但它们似乎在某些条件下有效,而在其他条件下无效.有没有一种灵丹妙药可以让你在PHP中获得执行脚本的绝对路径?对我来说,脚本将从命令行运行,但是,如果在Apache等中运行,解决方案也应该运行良好.

Clarification: The initially executed script, not necessarily the file where the solution is coded.

推荐答案

正确的解决方案是使用get_included_files功能:

list($scriptPath) = get_included_files();

这将为您提供初始脚本的绝对路径,即使:

  • 此函数放在包含的文件中
  • 当前工作目录与初始脚本目录不同
  • 该脚本作为相对路径使用CLI执行

这里有两个测试脚本;主脚本和包含的文件:

# C:\Users\Redacted\Desktop\main.php
include __DIR__ . DIRECTORY_SEPARATOR . 'include.php';
echoScriptPath();

# C:\Users\Redacted\Desktop\include.php
function echoScriptPath() {
    list($scriptPath) = get_included_files();
    echo 'The script being executed is ' . $scriptPath;
}

结果如何;请注意当前目录:

C:\>php C:\Users\Redacted\Desktop\main.php
The script being executed is C:\Users\Redacted\Desktop\main.php

Php相关问答推荐

为WooCommerce中的特定用户角色指定促销价格

在保留唯一键值对的情况下高效合并嵌套数组

将产品类别添加到WooCommerce产品附加信息

PHP中的圆生成器在国际日期变更线上失败

Sylius php -如何将购物车传递到小枝模板(Sylius模板事件)

Chillerlan/php-iOS名称字段的QR vCard错误

Laravel服务Provider 没有向服务类注入价值

如何从WooCommerce checkout 帐单邮箱字段中删除星号?

无法在Laravel中将日志(log)通道设置为空

拉威尔10有许多通过获取所有祖父母数据的子元素S图像

WooCommerce 以编程方式添加的费用不会持续存在

如何在 Phpunit 的静态提供程序中创建测试双打?

由于 PHP 版本不受支持,如何终止 PHP 脚本?

加载 Xdebug PHP 7.4.0 失败

避免在 WooCommerce 中多次触发挂钩函数

如何在 Laravel 中修改嵌套数组的键?

如何从 PHP 中的 .txt 文件中列出今天生日的人的姓名?

为 WordPress 页面创建新功能

NetBeans 不显示中文内容

无法按今天加上 7 天显示数据库项目