" いいね " なライフをつくる。

うそはつかない。"いいね"をつくる。じゆーうな日記です。

Laravel, Homestead環境構築:「No input file specified.」と表示されてブラウザ表示できない場合

Laravelの環境構築をしおり、laravelプロジェクトを立ちあげブラウザで確認したところ、No input file specified. と表示されてしまいました。 ハマってしまったので解決策を記載しておきます。

下記の記事を参考に、環境構築を行っていたところ、

【Laravel超入門】開発環境の構築(VirtualBox + Vagrant + Homestead + Composer)

事象

遭遇したのは、こんな画面です。 f:id:tusukurukun:20180321160904p:plain

日本語でいうと「入力ファイルが指定されていません。」というエラーです。

原因

原因です。

そもそも、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";

再びブラウザを読み込むと...

f:id:tusukurukun:20180321162029p:plain

hello worldが出力されました。

これで、やはりディレクトリのズレを合わせることさえできれば、Laravelのプロジェクトを読み込んでくれそうということがわかりました。

解決策

解決策です。

現在の実行環境を確認してみます。 phpのvar_exportメソッドを使い、$_SERVERというグローバル変数を確認してみます。

var_export — 変数の文字列表現を出力または返す。

PHP: var_export - Manual

$_SERVER ー どこからでも呼べるグローバル変数で、実行環境の情報等を返す。

PHP: $_SERVER - Manual

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

再びブラウザを更新すると...

f:id:tusukurukun:20180321164441p:plain

Laravelのトップ画面が表示できました。

DOCUMENT_ROOTとLaravelのディレクトリ階層を同一にしたことで解消できました。

要点まとめ

  • DOCUMENT_ROOTの指定先と、index.phpの配置箇所が違っていたことが原因。
  • DOCUMENT_ROOTの指定先を合わせてあげることで解消できる。