謎の呪文だったPHP起動コマンドを、ダブルクリック一発にしてみた

PHPサーバーは起動したのにブログが開かない。原因は8080と8090のポート番号の違い。PowerShellの意味を理解し、日本語パスの文字化けも乗り越えて、.cmdで起動できるようになった実体験。

アップヒル印刷社のホームページをローカル環境で確認していたときのこと。ブログの記事を表示しようとしたら、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 でした。

PowerShellでphp.exeの場所を調べ、PHPサーバーを起動する流れの説明用再現図
PowerShellの画面を参考に作成した再現図。実際の操作画面のスクリーンショットではありません。 図中のフォルダ名も架空の例です。

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。番号が違っていたんです。

PHPサーバーの8090番とブラウザの8080番が一致していないことを示す図
PHPを8090番で起動したら、Firefoxも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

メモ帳にPHP起動用のバッチファイルを書く様子を示す再現図
保存するファイルは .cmd。図は見やすく折り返した説明用で、実際の入力は本文の3行を使用します。 図中のフォルダ名も架空の例です。

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サーバーとして使うものではありません。

← 「あれこれ」の記事一覧へ戻る