如何使用 Storage 将文件作为资源获取?

How to get file as a resource with Storage?

我正在尝试使用 flock 函数锁定文件,但我无法执行此操作。我使用 Laravel 8 和存储 Class。

代码如下:

$disk = Storage::disk('communication');
$file_name = 'received.json';

$file_exists = $disk->exists($file_name);
if($file_exists){
    flock($disk->get($file_name), LOCK_EX);
    ...
}

我遇到的问题是,当我在文件路径上调用 get() 函数时,它 returns 文件的内容(字符串),这会导致以下错误:

flock() expects parameter 1 to be resource, string given

我需要知道如何获取文件作为资源而不是文件的内容。 有人可以帮助我并告诉我该怎么做吗?

非常感谢您。

可以使用Storage::readStream()方法

   if($file_exists){
    
      $stream=Storage::disk('communication')->readStream($file_name); 
       flock($stream, LOCK_EX);
    
    }

根据 php 文档

flock(resource $stream, int $operation, int &$would_block = null): bool

First param needed stream.flock() allows you to perform a simple reader/writer model which can be used on virtually every platform (including most Unix derivatives and even Windows).

参考:https://www.php.net/manual/en/function.flock.php