PHPフレームワークのLaravelをWindows環境で使っていて、php artisan serveコマンドを実行すると下記のエラーが出て起動できなかったので、確認&対処した結果を書いておきます。
出力されたエラー
php artisan serve
コマンドで起動させようとしたところ、下記のようにエラーが出力し起動できませんでした。
> php artisan serve
Laravel development server started:<http://127.0.0.1:8000>
[Thu Feb 22 10:16:59 2018] Failed to listen on 127.0.0.1:8000
(reason: アクセス許可で禁じられた方法でソケットにアクセスしようとしました。)
このエラーは、該当のポートが別のプログラムによって使用されていた時に出力されます。(上記の例では8000番ポートが使用されています)
8000番ポートを使っているプロセスを確認する
問題の8000番ポートが誰に使われているかは、netstat -ano
コマンドで確認できます。
netstatコマンドで指定する-a -n -o
オプションの意味はそれぞれ以下の通りです。
> netstat /?
...
-a すべての接続とリッスン ポートを表示します。
-n アドレスとポート番号を数値形式で表示します。
-o 各接続に関連付けられたそれらを所有するプロセス ID を表示します。
コマンドを実行すると、下記のように8000番ポートはPID4のプロセスで使用されていることが分かりました。
$ netstat -ano
アクティブな接続
プロトコル ローカル アドレス 外部アドレス 状態 PID
...
TCP 0.0.0.0:8000 0.0.0.0:0 LISTENING 4
TCP [::]:8000 [::]:0 LISTENING 4
PID=4のプロセスを確認する
実行しているプロセスの一覧はtasklist
コマンドで確認できます。
今回はPID=4のプロセスが知りたいので、tasklist /fi "PID eq 4"
のコマンドを実行します。
$ tasklist /fi "PID eq 4"
イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
System 4 Services 0 3,504 K
プロセス名がSystemという事で、これ以上詳しいことは分からず...
ブラウザから8000ポートにアクセスしてみる
方針転換して、ブラウザからhttp://localhost:8000/にアクセスしてみます。
Response Headerを見てみたら、犯人は"Microsoft-HTTPAPI/2.0"のようです。
HTTP/1.1 404 Not Found
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Thu, 22 Feb 2018 09:01:55 GMT
Connection: close
Content-Length: 315
PCのサービス一覧をチェックしてもIISは起動しておらず、他にSkypeなども停止してみたものの問題は解決されず...
システムのプロセスが8000番を使っているところまで分かったのですが、ここから先が解決できなかったため、Laravel側のポートを変更する方向に方針を転換しました。
ポート番号を変更してphp artisan serveを実行
php artisan serveのヘルプを見ると--port
オプションでリッスンするポートを変更できることが分かりました。
$ php artisan serve -h
Usage:
serve [options]
Options:
--host[=HOST] The host address to serve the application on. [default: "127.0.0.1"]
--port[=PORT] The port to serve the application on. [default: 8000]
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--env[=ENV] The environment the command should run under
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Help:
Serve the application on the PHP development server
というわけで、以下のように--port=8080
のように指定すると、8080ポートで起動しました。
$ php artisan serve --port=8080
Laravel development server started: http://127.0.0.1:8080
ブラウザで、http://127.0.0.1:8080にアクセスすると、以下のように無事出力されました。