前提・実現したいこと
Laravelでexcelファイルをアップロードし、
アップロードしたexcelファイルを読み取り
DBに書き込む処理を実装したいと考えております。
excelファイルを取り込むメソッドを実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
403 Forbidden
該当のソースコード
capture.blade.php
1<form method="post" action="{{ url('talent/import',null,$is_production) }}" enctype="multipart/form-data"> 2 @csrf 3 <div class="select-file"> 4 <input type="file" name="excel_file" id="excel_file" accept=".xlsx" > 5 </div> 6 <div class="upload-talent"> 7 <input class="btn btn-primary capture-button" type="submit" value="アップロード"> 8 </div> 9 </form> 10$is_productionはローカルだとhttp通信で本番だとhttps通信になります。 11そのため.envファイルのAPP_ENVをローカルではlocal、本番ではproductionとしており、 12本番の環境で動く際はssl化をしています。
web.php
1// ExcelファイルImport処理 2Route::post('/talent/import', 'TalentCaptureController@import');
public function import(Request $request) { Log::info('0'); //__construct内で環境を判別してプロパティに値をセット $this->is_production = env('APP_ENV') === 'production' ? true : false; //選択したファイルを一時保存 Log::info('1'); $request->file('excel_file')->storeAs('','import.xlsx'); Log::info('2'); $reader = new Xlsx(); } controllerは一部のみを記載しました。 ローカルだと問題なく動きますが、本番だと403が表示され、controllerが呼び出されません。
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
https://ja.wikipedia.org/wiki/HTTP_403
↑を念頭に置きつつエラーログを確認してみてはどうでしょう
ログを仕込んでみたのですが、ログにエラーが記載されておらず、catchできないです。
その前にwebサーバーのログを確認しましょう apacheとかnginxとか
ただのディレクトリ権限設定ミスだとは思うけど、webサーバーが吐くログを元に原因追究するのが確実です
ありがとうございました。
webサーバーのログを明日確認してみます。
> controllerは一部のみを記載しました。
とのことですが、importメソッドの中身も一部のみを記載でしょうか? その場合、未掲載コードで例えばPolicyによるチェック等をしていて、そこでアクセス権無しと判断されたりしているということはありませんか?
importメソッドも一部のみ記載です。
というのもコントローラー側にログをセットしたのですが、一つもログに出力されず、コントローラーまで通ってないようでした。
webサーバーのログで確認するのが良さそうですね。
Apacheのエラー、アクセスログを見たのですが、403エラーに関する記載はありませんでした。
またサーバーはwindowsserver2019にApache,PHPでWEBサーバーを構築しています。
すみません上の流れをちゃんと読んでなくて的外れなことを書き込んでしまったので編集してます。
laravelのログを確認したところ、controllerまで処理は流れていました。
その中でも$request->file('excel_file')->storeAs('','import.xlsx');
の箇所でおそらく403 Forbiddenになっているものと思われます。
「403 Forbidden」だけではなく他にも色々と重要な情報が出力されていないでしょうか?それらを掲載されてはいかがでしょうか。(公開したくない部分を伏せて)
ブラウザ上では本当に「403 Forbidden」だけしか表示されないです。
そうですか・・・
> laravelのログを確認したところ、controllerまで処理は流れていました。
> その中でも$request->file('excel_file')->storeAs('','import.xlsx');
> の箇所でおそらく403 Forbiddenになっているものと思われます。
0,1までは出力され、2は出力されなかったということでしょうか?
あと、Laravelプロジェクトの storage/app/ ディレクトリ配下に import.xlsx ファイルは出力されていますか?
> 0,1までは出力され、2は出力されなかったということでしょうか?
→その通りです。
>あと、Laravelプロジェクトの storage/app/ ディレクトリ配下に import.xlsx ファイルは出力されていますか?
→出力されていないです。
また参考になるかわからないですが、
ローカル(自分の開発環境端末)で同様にapache、phpでWEBサーバーを立てており、
そこではLaravelプロジェクトの storage/app/ ディレクトリ配下に import.xlsx ファイルが作成され
自分が行いたいEXCEL取込が正常に行われます。
ローカルと本番サーバーでの大きな違いはhttp通信(ローカル)かhttps通信(本番)だと思っています。
うーん・・・storage/app/ ディレクトリのパーミッションの問題なのかな・・・
storage/app/ ディレクトリのパーミッションにフルコントロールを付与しましたがダメでした。
フルコントロールって事はwindowsに直接apache入れてるんですか?そうなら質問にそのことを書きましょう 他にも環境関連の情報は追記しましょう
自分はlinux系しか分からないのでwindowsでの環境構築に関する質問は答えられません
windowsにapacheを直接入れています。
また>またサーバーはwindowsserver2019にApache,PHPでWEBサーバーを構築しています。
という感じで環境関連の記載をしています。

回答1件
あなたの回答
tips
プレビュー