PHP Phar - file_exists() 问题

标签 php include require file-exists phar

我的 Phar 脚本使用 fwrite 创建了一个新文件,它工作正常,它在 phar 外部创建新文件,与 phar 文件位于同一目录中。

但是当我使用 if(file_exists('file.php')) 时,它并没有接收到它。

然后包含和要求确实选择它。

有人知道这个问题吗? 经过一段时间的测试和研究,似乎无法找到解决方案。

最佳答案

在 PHAR 的 stub 处,您可以使用 __DIR__ 魔法常量来获取 PHAR 文件的文件夹。

考虑到这一点,您可以简单地使用

is_file(__DIR__ . DIRECTORY_SEPARATOR . $path);

检查文件是否存在于 PHAR 之外。

您只能从 stub 执行此操作,并且仅当它是自定义 stub 时才能执行此操作,而不是由 Phar::setDefaultStub() 生成的 stub 。如果您需要进一步检查文件,则必须以某种方式使该常量的值可用,例如全局变量、自定义非魔法常量或静态属性或其他东西,然后其他文件会引用这些值。

编辑:实际上,您还可以使用 dirname(Phar::running(false)) 从 PHAR 中的任何位置获取 PHAR 的文件夹。如果您不在 PHAR 中,该函数将返回一个空字符串,因此无论您的应用程序是作为 PHAR 执行还是直接执行,它都应该可以正常工作,例如

$pharFile = Phar::running(false);
is_file(('' === $pharFile ? '' : dirname($pharFile) . DIRECTORY_SEPARATOR) . $path)

关于PHP Phar - file_exists() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18325572/

相关文章:

php - 编辑 woocommerce 运费计算器

php - 与 API 共享 Cookie 来验证用户身份的最佳方式

c++ - 如何将 boost 库包含到 C++ 程序中?

require - Google App Engine Channels API/使用 React Native 加载外部 JS

php - 如何将秒转换为时间格式?

PHP - 使用下拉列表更改站点主题

php - 使用 ansible 运行 php 脚本会抛出错误

c++ - VSCode运行c++代码时没有这样的文件或目录

lua - 如何在Lua中使用require来访问Luvit的内置模块?

php - 包含,需要语法错误文件