Search code examples
laravelfilelaravel-storage

How to get file as a resource with Storage?


I am trying to lock a file with the flock function but I am not able to do it. I work with Laravel 8 and Storage Class.

The code is as follows:

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

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

The problem I'm having is that when I invoke the get() function on the file path, it returns the contents of the file (a string), which causes the following error:

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

I need to know how to get file as a resource and not the content of the file. Could someone help me and tell me how to do it?

Thank you very much in advance.


Solution

  • You can use Storage::readStream() method

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

    As per php doc

    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).

    Ref:https://www.php.net/manual/en/function.flock.php