Laravel, Homestead環境構築:「No input file specified.」と表示されてブラウザ表示できない場合
Laravelの環境構築をしおり、laravelプロジェクトを立ちあげブラウザで確認したところ、No input file specified. と表示されてしまいました。 ハマってしまったので解決策を記載しておきます。
下記の記事を参考に、環境構築を行っていたところ、
【Laravel超入門】開発環境の構築(VirtualBox + Vagrant + Homestead + Composer)
事象
遭遇したのは、こんな画面です。
日本語でいうと「入力ファイルが指定されていません。」というエラーです。
原因
原因です。
そもそも、Laravelを開く以前に、ファイルが指定されていないというエラーのようなのでnginxのログを確認しました。
tail -f /var/log/nginx/homestead.test-error.log
ページを更新...
2018/03/21 06:57:39 [error] 1514#1514: *3 FastCGI sent in stderr: "Unable to open primary script: /home/vagrant/code/public/index.php (No such file or directory)" while reading response header from upstream, client: 192.168.10.1, server: homestead.test, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.2-fpm.sock:", host: "192.168.10.10"
こんなエラーが記述されていました。
/home/vagrant/code/public/index.php (No such file or directory)
要点としては、「home/vagrant/code/public/index.php(そんなファイルはない)」ということでしたので、このindex.phpの指定場所が間違えているようです。
実際に、自分がLaravelのプロジェクト内のindex.phpを配置している場所はこちらでした。
/home/vagrant/code/Laravel/public/index.php
つまり、Laravelというディレクトリ配下に(code/Laravel/public/index.phpを)配置していたにも関わらず、実際に開こうとしていたファイルははcode/public/index.phpとなっていました。
このディレクトリ階層のズレによっておきてしまっていたエラーのようです。
では本当にhome/vagrant/code/public/index.php
がありさえすれば、このエラーが解消するのかを検証します。
public/index.phpを作成し、code/public/index.phpという構造を試しに作成してみます。
cd ~/code mkdir public vim public/index.php
hello worldを表示するよう記述
<?php echo "hello world";
再びブラウザを読み込むと...
hello worldが出力されました。
これで、やはりディレクトリのズレを合わせることさえできれば、Laravelのプロジェクトを読み込んでくれそうということがわかりました。
解決策
解決策です。
現在の実行環境を確認してみます。 phpのvar_exportメソッドを使い、$_SERVERというグローバル変数を確認してみます。
var_export — 変数の文字列表現を出力または返す。
$_SERVER ー どこからでも呼べるグローバル変数で、実行環境の情報等を返す。
vim index.php
<?php var_export($_SERVER);
ブラウザを更新すると環境の情報が出力されます。
その中のドキュメントルートを確認。
'DOCUMENT_ROOT' => '/home/vagrant/code/public'
nginxのログで確認したエラーのディレクトリと同様であることが確認できました。
DOCUMENT_ROOTの設定を変更すれば今回のエラーを解消できそうなことがわかりました。
/home/vagrant/code/public/index.php (No such file or directory)
今回はHome steadで環境構築をしているので、exitでローカルに戻り、
vim Homestead.yml
sites: - map: homestead.test to: /home/vagrant/code/public
to: がDOCUMENT_ROOTなので、こちらを書きかえます。
to: /home/vagrant/code/Laravel/public
設定を適用するためにローカルで書きを実行
vagrant provision
再びブラウザを更新すると...
Laravelのトップ画面が表示できました。
DOCUMENT_ROOTとLaravelのディレクトリ階層を同一にしたことで解消できました。
要点まとめ
- DOCUMENT_ROOTの指定先と、index.phpの配置箇所が違っていたことが原因。
- DOCUMENT_ROOTの指定先を合わせてあげることで解消できる。