第10回: よくあるエラーとトラブルシューティング — 詰まったときに読む一覧

章: 第6章: トラブルシューティング

対象OS: Windows / Mac 共通(OS別の違いは各項目に記載)

「動かない理由がわからない」—— エラーを読む技術を身につける

環境構築でつまずく理由のほとんどは「エラーメッセージを読んでいない」か「読んでも意味がわからない」かのどちらかです。PHPの環境エラーはパターンが決まっていて、原因さえわかれば解決策はシンプルです。

この記事では、Windows・Macの両方でよく発生するエラーをパターン別にまとめます。

パターン1: php: command not found / 'php' は内部コマンドとして認識されません

### 意味

PHPはインストールされているが、ターミナルのPATHに登録されていない。

### 原因と解決策

OS 解決策
Windows(XAMPP) 環境変数の PathC:\xampp\php を追加する(第02回を参照)
Windows(変更後) 環境変数の変更は新しく開いたターミナルから有効になる
Mac(MAMP) ~/.zshrcexport PATH="/Applications/MAMP/bin/php/php8.x.x/bin:$PATH" を追記する
Mac(Homebrew) brew install php のあと source ~/.zshrc を実行する

確認コマンド(どこのPHPが使われているかを調べる):


# Mac / WSL2
which php

# Windows
where php

パターン2: Apacheが起動しない(XAMPPでポートエラー)

### 意味

ポート80がすでに別のプロセスに使われている。

### エラーメッセージ例


Apache shutdown unexpectedly.

### 解決策

原因の特定(Windows):


netstat -ano | findstr :80

表示されたPIDを確認して、タスクマネージャーで該当プロセスを終了します。

よくある競合プロセス:

プロセス 対処
IIS(Internet Information Services) Windowsの機能で「IIS」を無効化する
Skype(旧バージョン) Skypeの設定でポート80の使用を無効化する
別のApache / Nginx 起動中の他サービスを停止する

別のポートに変更する方法(XAMPP):

C:\xampp\apache\conf\httpd.conf を開き、Listen 80Listen 8080 に変更してApacheを再起動します。その場合のアクセスURLは https://phpl4b.com/ になります。

パターン3: PHPファイルがダウンロードされる(中身が実行されない)

### 意味

ApacheがPHPファイルをPHPとして処理せず、テキストとして送信している。

### 解決策

  • XAMPPを使用している場合: PHPモジュールが有効になっているか確認する。C:\xampp\apache\conf\httpd.confLoadModule php_module の行がコメントアウトされていないか確認する。
  • ビルトインサーバーを使っている場合: .php 拡張子のファイルを php -S で起動したディレクトリ以下に置いているか確認する。

パターン4: Fatal error: Uncaught Error: Class not found

### 意味

指定したクラスが読み込まれていない。

### よくある原因

原因 解決策
requireinclude が間違っている ファイルパスを確認する(相対パスか絶対パスか)
Composerのオートロードが更新されていない composer dump-autoload を実行する
名前空間の指定が間違っている use 宣言とクラスのnamespaceが一致しているか確認する

パターン5: MySQLに接続できない

### エラーメッセージ例


SQLSTATE[HY000] [2002] Connection refused

### 確認手順

1. MySQLサービスが起動しているか確認

– XAMPP: Control Panelでグリーン表示か確認

– MAMP: GUIでMySQLランプが点灯しているか確認

– Docker: docker compose ps でStatusがRunningか確認

2. 接続情報が正しいか確認

項目 XAMPPデフォルト MAMPデフォルト Dockerの場合
ホスト 127.0.0.1 127.0.0.1 サービス名(例: db
ポート 3306 8889 3306
ユーザー root root compose.ymlで設定した値
パスワード (空) root compose.ymlで設定した値

MAMPの注意: MAMPのMySQLはデフォルトでポート8889を使います。3306に変更する場合はMAMPのPreferencesから設定します。

パターン6: Dockerコンテナが起動しない

### 確認コマンド


# コンテナの状態を確認
docker compose ps

# エラーログを表示
docker compose logs

# 特定サービスのログ
docker compose logs web

### よくある原因

原因 解決策
ポートが競合している docker-compose.yml のポート番号を変更する(例: 8080:808081:80
docker-compose.yml のインデントが崩れている YAMLはスペースでインデントする(タブ不可)
イメージ名が間違っている docker pull php:8.2-apache で存在を確認する

パターン7: 改行コードの問題(Windows固有)

### 症状

シェルスクリプト(.sh)をLinux環境(WSL2・Docker)で実行すると「コマンドが見つからない」エラーが出る。

### 原因

Windowsのエディタで保存すると改行コードが CRLF\r\n)になることがあります。Linux/Macは LF\n)のみを期待するため、余分な \r がコマンド名の末尾に含まれてしまいます。

### 解決策

VS Codeで変換:

  • 右下のステータスバーに表示されている CRLF をクリック → LF を選択して保存する

VS Codeのデフォルト設定:


"files.eol": "\n"

settings.json に追記すると新規ファイルが自動的に LF になります。

まとめ

エラーパターン 原因 確認する場所
php: command not found PATHの未設定 環境変数、~/.zshrc
Apache起動失敗 ポート競合 netstat、タスクマネージャー
PHPがダウンロードされる モジュール設定ミス httpd.conf
クラスが見つからない オートロード・パスのミス composer dump-autoload、namespaceの確認
MySQL接続エラー サービス未起動・接続情報の誤り サービスの状態、ポート番号
Dockerコンテナ未起動 ポート競合・YAMLミス docker compose logs
シェルスクリプトエラー 改行コードCRLF VS Codeで LF に変換

環境系のトラブルは「エラーメッセージを正確に読む」「ログを確認する」「一つ変えては試す」の繰り返しで解決できます。焦らず順番に確認していきましょう。

Related Articles