アップヒル印刷社のホームページをローカル環境で確認していたときのこと。ブログの記事を表示しようとしたら、Firefoxに「正常に接続できませんでした」と表示されました。
以前教えてもらったコマンドを思い出して、自分なりに実行したのに、なぜか開けない。実はこのとき、PHPサーバーはちゃんと動いていたんです。
原因はたった4桁の数字。そこから、PowerShellの「謎の呪文」の意味が少し分かり、最後はダブルクリックだけでサーバーを起動できるようになりました。
まずは「PHPがどこにあるのか」を探してみた
最初は「php -S 127.0.0.1:8080 -t .」と入力したところ、php というコマンドが認識されませんでした。PHPがないのかと思いきや、Windowsが php.exe の場所を知らないだけでした。
以前の作業で見覚えがあった検索コマンドを使って、PHPを探します。
※以下のコマンドに登場するC:\作業例\サンプルサイト以下のパスは、説明用に置き換えた架空のパスです。
Get-ChildItem "C:\作業例\サンプルサイト" -Filter php.exe -Recurse -ErrorAction SilentlyContinue | Select-Object -ExpandProperty FullName
見つかった場所は、C:\作業例\サンプルサイト\ツール\php\php.exe でした。

PHPは起動していた。それでもブログが開かない理由
見つかった php.exe を使い、今度は次のように実行しました。
& "C:\作業例\サンプルサイト\ツール\php\php.exe" -S 127.0.0.1:8090 -t "C:\作業例\サンプルサイト\公開フォルダ"
PHPサーバー自体は起動したのに、Firefoxで案内されていた http://127.0.0.1:8080/ に接続できません。
そこで教えてもらったのが「ポート番号」。起動コマンドは8090、ブラウザで開こうとしていたのは8080。番号が違っていたんです。

「127.0.0.1」は自分自身のPCを表し、その後ろの「:8080」「:8090」が接続先の入口を指定しています。8090で起動したなら、ブラウザも http://127.0.0.1:8090/blog/ にすればよかったわけです。
今回は8080番に合わせて起動し直したところ、記事が表示されました。コマンドそのものは間違っていなかったと分かり、ちょっと感動(笑)。
長いコマンドを分解したら、意味が見えてきた
- &:PowerShellで、指定したプログラムを実行するための記号
- "...\php.exe":実行するPHPプログラムの場所
- -S 127.0.0.1:8080:自分のPCで8080番を使って簡易Webサーバーを起動
- -t "...\公開フォルダ":Webサイトとして表示するフォルダを指定
「PHPをどこから実行し、どのフォルダを、どの入口で表示するか」。そう考えると、意味不明だった一行が少し読み解けました。
しかも -t で表示するフォルダを指定しているので、PowerShellを 公開フォルダで開く必要もありません。
さらに、ダブルクリックだけで起動できるようにする
ここまで来たら、毎回PowerShellに長いコマンドを貼り付けなくてもよさそうです。メモ帳で起動用のファイルを作ってみることにしました。
ファイル名は「PHPサーバーを起動する.cmd」。中身は次の3行です。
@echo off
"C:\作業例\サンプルサイト\ツール\php\php.exe" -S 127.0.0.1:8080 -t "C:\作業例\サンプルサイト\公開フォルダ"
pause

PowerShellで使った先頭の「&」は、cmdファイルの中では不要です。「@echo off」はコマンド自体の表示を省き、「pause」は処理が終わった後に画面を閉じずに待つ命令です。
まさかの落とし穴。日本語のパスが文字化け!
メモ帳でUTF-8として保存して実行したところ、「指定されたパスが見つかりません」と表示されました。PowerShellでは動いたのに、cmdファイルになると動かない。
今回は、ファイルを日本語版Windowsの「ANSI」で保存し直したところ、正常に起動できました。日本語を含むフォルダ名と、バッチファイルを読む際の文字コードの組み合わせが影響したようです。
ただし、どのPCでもANSIが正解とは限りません。Windowsの文字コード設定によっては別の対応が必要です。
ついにダブルクリック一発!
作った「PHPサーバーを起動する.cmd」をダブルクリックすると、黒い画面が開いてPHPサーバーが起動。Firefoxで http://127.0.0.1:8080/blog/ を開いたら、ちゃんとブログを確認できました。
終了するときは黒い画面で Ctrl + C。今回は「バッチ ジョブを終了しますか (Y/N)?」と聞かれたので、Y を選んで終了しました。
一度作ってしまえば、もうPHPの場所を毎回検索する必要はありません。Windowsに「このプログラムを、この設定で起動してね」と頼むための小さな近道ができたわけです。
まとめ:呪文を暗記するより、意味を一つ知る
最初は「前に成功したコマンドだから」と、意味を分からずそのままなぞっていました。でも、ポート番号の意味を一つ知るだけで、接続できない理由が分かりました。
さらに、PowerShell用のコマンドとcmd用の書き方が少し違うこと、日本語パスでは文字コードにも注意がいることも知りました。
ホームページを自分で作ったり直したりしていると、こんな寄り道もあります。でも、できなかったことが一つできるようになるのは、やっぱりちょっと楽しいですね。
※実際の作業をもとにした記事ですが、掲載したフォルダの場所とPHPの保存先はプライバシー保護のため架空の例に置き換えています。実際に使う場合は各自の環境に合わせて変更してください。PHP内蔵サーバーは開発・確認用であり、一般公開用のWebサーバーとして使うものではありません。
