我的 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/