質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

0回答

1705閲覧

Laravel filesystemsを利用してアプリケーション外のディスクを指定する

S.Kasagawa

総合スコア1

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2020/09/08 02:41

前提・実現したいこと

現在書籍『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 (---略---)

長文となりましたが出来る限り現状についてご説明させていただきました。
他に必要な情報・コードなどがあれば追記いたしますのでご指摘してください。
何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki84web

2020/09/08 14:42

推測で申し訳ないですが、もし出来るとしたらアプリケーションからの相対パスになると思います。
S.Kasagawa

2020/09/09 02:58

yuki84web さん ご指導ありがとうございます。 パスを絶対パスから相対パスへ変更したのですが、相変わらず/helloでフォルダーの中身が表示されませんでした。 なかなか見られないエラーなのかネット上にも同じ問題に出会った方は少なさそうです…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問