前提・実現したいこと
現在書籍『PHPフレームワーク Laravel実践開発』を用いてLaravelの学習を行っています。
filesystems.phpに外部のアプリケーションのディスクを指定してブラウザに表示しようと試みています。
具体的には、現在Laravelを使用しているディレクトリは
C:\xampp\htdocs\laravel_app (laravel_appはアプリケーション名)
のパスに置いており、今回
C:\Windows
のフォルダにアクセスしようとしています。
発生している問題・エラーメッセージ
発生している問題はControllerとfilesystems.phpの設定後、ブラウザ表示をした際にエラーメッセージがブラウザに表示されていることです。以下が表示されてたエラーメッセージです。
RecursiveDirectoryIterator::__construct(C:\Windows\appcompat\Programs,C:\Windows\appcompat\Programs): アクセスが拒否されました。 (code: 5)
該当のソースコード
以下にControllerとfilesystemsのソースコードを記載します。
Controllerのソースコード
HelloController.php
1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Person; 7use Illuminate\Support\Facades\Storage; 8 9class HelloController extends Controller 10{ 11 public function index() 12 { 13 $dir = '/'; 14 $all = Storage::disk('win')->allfiles($dir); 15 16 $data = [ 17 'msg' => 'DIR: '.$dir, 18 'data' => $all 19 ]; 20 return view('hello.index', $data); 21 } 22 23} 24
filesystemsのソースコードです。
filesystems.php
1<?php 2 3return [ 4 'default' => env('FILESYSTEM_DRIVER', 'local'), 5 'cloud' => env('FILESYSTEM_CLOUD', 's3'), 6 'disks' => [ 7 8 'local' => [ 9 'driver' => 'local', 10 'root' => storage_path('app'), 11 ], 12 13 'public' => [ 14 'driver' => 'local', 15 'root' => storage_path('app/public'), 16 'url' => env('APP_URL').'/storage', 17 'visibility' => 'public', 18 ], 19 20 's3' => [ 21 'driver' => 's3', 22 'key' => env('AWS_ACCESS_KEY_ID'), 23 'secret' => env('AWS_SECRET_ACCESS_KEY'), 24 'region' => env('AWS_DEFAULT_REGION'), 25 'bucket' => env('AWS_BUCKET'), 26 'url' => env('AWS_URL'), 27 'endpoint' => env('AWS_ENDPOINT'), 28 ], 29 30 //今回追記したコード。C:ドライブのWindowsフォルダにアクセスする。 31 'win' => [ 32 'driver' => 'local', 33 'root' => 'C:\Windows\', 34 ] 35 36 ], 37 'links' => [ 38 public_path('storage') => storage_path('app/public'), 39 ], 40 41]; 42
試したこと
(1) キャッシュクリアを以下のコマンドを実行して行いました。
参考サイト:Qiita Laravel キャッシュクリア系コマンドなど
php artisan cache:clear php artisan config:clear php artisan route:clear php artisan view:clear
しかし、キャッシュクリアを行っても同様のエラー(エラーメッセージも全く同じ)が発生しました。
(2) 別パスのフォルダーを設定
フォルダーのアクセス拒否設定の問題だと思い、パスを変更してアクセス制限のないフォルダーへのアクセスを試みました。
新しいファイルパス:C:\xampp\php
filesystems.php
1 (---略---) 2 3 'disks' => [ 4 5 (---略---) 6 //変更したコード。 7 'win' => [ 8 'driver' => 'local', 9 'root' => 'C:\xampp\php', 10 ] 11 12 (---略---)
しかし、ファイルパスの変更をしても同様のエラー(エラーメッセージも全く同じ)が発生しました。
補足情報(FW/ツールのバージョンなど)
使用している各言語・フレームワーク等のVerは以下の通りです。
Laravel : 7.26.1
PHP : 7.4.7
Composer : 1.10.10
開発環境はWindows10、XAMPPを用いてローカル環境開発を行っています。
また、アプリケーション内のStorageフォルダーに保存されているファイル(例えば/storage/logs)へのアクセスは可能でした。その際使用したソースコードは以下の通りです。
HelloController.php
1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Person; 7use Illuminate\Support\Facades\Storage; 8 9class HelloController extends Controller 10{ 11 public function index() 12 { 13 $dir = '/'; 14 $all = Storage::disk('logs')->allfiles($dir); 15 16 $data = [ 17 'msg' => 'DIR: '.$dir, 18 'data' => $all 19 ]; 20 return view('hello.index', $data); 21 } 22 23} 24
filesystemsのソースコードです。
filesystems.php
1 (---略---) 2 3 'disks' => [ 4 5 (---略---) 6 //今回追記したコード。Storageのファイルlogsにアクセスする。 7 'logs' => [ 8 'driver' => 'local', 9 'root' => storage_path('logs'), 10 'url' => env('APP_URL').'/storage/logs', 11 ], 12 13 (---略---)
長文となりましたが出来る限り現状についてご説明させていただきました。
他に必要な情報・コードなどがあれば追記いたしますのでご指摘してください。
何卒よろしくお願いいたします。
あなたの回答
tips
プレビュー