我目前正在为某些插件编写一个记录器,写入 ILIAS 中相当大的日志文件。我正在使用整洁的新文件系统。由于新的日志消息需要附加到文件中,我不能简单地使用 put 或 update,因为它们似乎总是截断日志文件。Flysystem 似乎不支持简单的附加命令,所以我发现一种可行的方法如下:
$old_data = "";
if ($DIC->filesystem()->storage()->has($this->path)) {
$old_data = $DIC->filesystem()->storage()->read($this->path);
}
$DIC->filesystem()->storage()->put($this->path, $old_data.$string);
但是,如果将大量数据附加到日志中,这对于 IO 来说似乎非常昂贵。我想,这最好使用流来完成。我的文档(https://github.com/ILIAS-eLearning/ILIAS/tree/release_5-3/src/Filesystem)我发现了以下内容:
$webDataRoot = $DIC->filesystem()->web();
$fileStream = $webDataRoot->readStream('relative/path/to/file');
//seek at the end of the stream
$fileStream->seek($fileStream->getSize() - 1);
//append something
$fileStream->write("something");
但是,有了这个,我得到了Can not write to a non-writable stream异常。看来,我需要像这样打开流:
$resource = fopen('myPath', 'rw');
但是,文档中特别不鼓励这样做。通过使用 ILIAS 中的文件系统来解决这个问题的最佳方法是什么?