fopen使用AWS S3包装器在模式x下失败

时间:2019-07-06 23:39:14

标签: php amazon-s3 php-7.2

TL; DR:我正在使用Nette Tracy库,该库针对发生的任何错误创建摘要(.log)和详细(.html)文件,并且尝试将它们上传到AWS S3。 .log文件成功显示,但是看不到.html文件。


我正在使用Nette Tracy库,并尝试将所有输出上传到S3存储桶。

到目前为止,我已经创建了S3包装器,并手动触发了一个异常以对其进行测试,但它仅部分成功。 S3包装器存在并且部分作为成功创建初始“概述”文档(error.log)的一部分-只是未显示HTML文档。可以在本地存储上正常工作,但最好使用S3。

当尝试记录实际的异常详细信息本身(HTML文件)时,fopen函数返回false。结果,该函数(下面的函数)也会返回false,并且不会创建该文件。

在实际上载的error.log文件中,记录了以下内容(删除了存储桶名称和路径):

  

PHP警告:fopen(s3:\ BUCKET \ debug \ tracy \ exception--2019-07-07--00-30--459a553c82.html):无法打开流:C中没有这样的文件或目录: \ path \ to \ file \ tracy \ Tracy \ BlueScreen \ BlueScreen.php:97 @ http://mydevelopment.site

不是很确定从这里去哪里?任何帮助指针表示赞赏!

这是Tracy库的一部分,该代码记录了完整的异常/错误详细信息:

    /**
     * Renders blue screen to file (if file exists, it will not be overwritten).
     */
    public function renderToFile(\Throwable $exception, string $file): bool
    {
        if ($handle = @fopen($file, 'x')) {
            ob_start(); // double buffer prevents sending HTTP headers in some PHP
            ob_start(function ($buffer) use ($handle): void { fwrite($handle, $buffer); }, 4096);
            $this->renderTemplate($exception, __DIR__ . '/assets/page.phtml', false);
            ob_end_flush();
            ob_end_clean();
            fclose($handle);
            return true;
        }
        return false;
    }

0 个答案:

没有答案