

S3サーバーから取得したファイルとアップロードしたファイルを結合したいと考えて  
下記のコードを作成いたしました。

[code]

    public function uploadJoin(Request $request)
    {
        $file = $request->file('file');
        $content = \Storage::disk('s3')->get( $file_name );
        
        $data = file_get_contents( $content );
        $data .= file_get_contents( $file );
        
        \Storage::disk('s3')->put( $file_name, $data );
        
        return [
            'message' => 'ok',
        ];
    }
    
[/code]

しかしファイル結合「file_get_contents() expects parameter 1 to be a valid
path」とエラーが出て結合できていない状態です。  
S3サーバーから取得したファイルをバイナリデータとして扱うにはどうすればよいのでしょうか。

よろしくお願い致します。


CC BY-SA 4.0
2021-05-02T06:36:03.627
75628
2021-05-06T12:35:50.367
2021-05-05T23:38:13.110
29606
29606
question
php aws laravel amazon-s3
S3サーバーから取得したファイルを結合したい


エラーを直訳すると、file_get_contents()の第一パラメータに有効なパスを指定しろって感じなので、単純にfile_get_contents()のパラメータが間違っているんだと思いますが。  
関数の仕様は確認されたのでしょうか？  
[PHP: file_get_contents - Manual](https://www.php.net/manual/ja/function.file-
get-contents.php)


CC BY-SA 4.0
2021-05-06T00:02:53.037
75687
2021-05-06T00:13:55.007
2021-05-06T00:13:55.007
41943
41943
75628
answer


getメソッドの返り値を見てみましょう。

[code]

    public function get($path, $lock = false)
    {
        if ($this->isFile($path)) {
            return $lock ? $this->sharedGet($path) : file_get_contents($path);
        }
    
        throw new FileNotFoundException("File does not exist at path {$path}.");
    }
    
[/code]

[Filesystem.php](https://github.com/laravel/framework/blob/fe6e25e697e5fbf3cfdf6a1826dc0078d7bce822/src/Illuminate/Filesystem/Filesystem.php#L51)

`$lock`が、`true`なら`sharedGetメソッド`、`false`なら`file_get_contents関数`の返り値を返していることがわかります。

`$lock`は規定値が`false`のため、今回の場合は、`file_get_contents関数`の返り値が、ご提示のコードの`$content`に代入されます。

つまりどう言うことか？  
`getメソッド`の返り値は、 **第一引数のファイルの中身**
なので、`file_get_contents関数`に入れると、「そんなファイルないよ！」と言うエラーになる。


CC BY-SA 4.0
2021-05-06T00:25:45.560
75688
2021-05-06T00:25:45.560
42016
75628
answer