現在、私はLaravelを使用しているプロジェクトに取り組んでいます。アップロードされたファイルを正しく処理する方法については本当に迷っています。ファイルシステムとアップロードファイルとディスクラーベールの比較
私が必要とするのは、アップロードされたファイルを特定のディレクトリ(プライベートで、サーバーによってのみアクセス可能)に保存することです。これはCSVファイルであり、そのデータを処理する必要があります。ですから、私はfgetcsvメソッドを使用してファイルを1行ずつ読むことを計画していますが、そのためのファイルハンドルが必要です。
ドキュメントによれば、アップロードされたファイルは一時ディレクトリに保存されており、要求オブジェクトに対してfile('variablename')
メソッドを呼び出すことによってファイルを示すUploadedFile
オブジェクトを取得できます。私はそれらのファイルを維持する必要があるので、私はdocumentation州としてストアメソッドを呼び出す必要があります(または多分別のアプローチを使用する)。悲しいことに、storeメソッドは、 "ディスクルート"に対する相対パスを返します。これは、FileSystem
オブジェクトで設定されたオブジェクトを意味します。そのパスにfopen
を使用している可能性はありますが、代わりに絶対パスが必要です。
ローカルディスク(storage_path('app')
)に設定されているルートがわかっているので、私が思いついたダーティな回避策は、storage_pathメソッドで遊ぶことです。
それはこの
$local_path = $file->store('uploads', 'local');
$abspath = storage_path('app') . '/' . $local_path;
// Pass the absolute path to the business layer
// In the business layer...
$fh = fopen($abspath, 'r');
// Do the thing
ようなものになるだろう任意のより良い方法はありますか?