初心者が陥りやすいPHPのバグTOP10

コードを書き、リフレッシュする。すると、真っ白な画面が表示される。

これは、PHPがデフォルトでエラーを静かに(表示せずに)終了してしまうために起こります。開発中は、強制的にエラーを表示させる設定にする必要があります。

ファイルの先頭に以下の行を追加してください:

ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);

これは本番環境では使用しないでください。代わりにファイルログを使用してください。

以下に、よくある10個の間違いとその修正方法を紹介します:

  • セミコロンの欠落 セミコロンを忘れると、PHPは動作を停止します。多くの場合、エラーが表示されずにクラッシュします。 修正方法:すべてのステートメントがセミコロンで終わっていることを確認してください。

  • 緩い比較 (== vs ===) 等号2つ(==)は型強制(型変換)を行います。これが論理エラーの原因となります。 修正方法:等号3つ(===)を使用してください。値と型の両方をチェックします。

  • 未定義の変数 変数に値を代入する前に使用すると、ロジックが壊れます。 修正方法:Null合体演算子を使用してください。 例:$name = $_GET['name'] ?? 'Guest';

  • グローバル変数のスコープ 関数は、その外側にある変数を見ることができません。 修正方法:変数を関数の引数として渡してください。

  • SQLインジェクション ユーザーの入力をそのままクエリに組み込むと、ハッカーによるデータ窃取を許してしまいます。 修正方法:プレースホルダ (?) を使用したプリペアドステートメントを使用してください。

  • クロスサイトスクリプティング (XSS) ユーザーの入力を直接出力すると、悪意のあるスクリプトがブラウザ上で実行される可能性があります。 修正方法:出力を htmlspecialchars() で囲んでください。

  • ヘッダーの送信済み (Headers Already Sent) ブラウザに既にテキストを送信している場合、ユーザーをリダイレクトすることはできません。スペースが1つあるだけでも、このエラーが発生します。 修正方法:header() の呼び出しはファイルの最上部に記述してください。リダイレクトの後は必ず exit() を使用してください。

  • 未定義の配列キー 存在しないフォームキーにアクセスすると、警告が発生します。 修正方法:すべての $_POST および $_GET データに対して、Null合体演算子を使用してください。

  • Include と Require の違い include はファイルが見つからない場合に警告を表示するだけです。スクリプトはそのまま実行され、後でクラッシュします。 修正方法:データベース接続などの重要なファイルには require_once を使用してください。

  • 戻り値の未チェック 多くのPHP関数は、失敗時に false を返します。その結果をすぐに使用すると、さらなるエラーが発生します。 修正方法:使用する前に、結果が false でないか確認してください。

成功のためのまとめ:

  • 開発中はエラーレポートを有効にする。
  • すべての比較に === を使用する。
  • すべてのユーザー入力をサニタイズする。
  • 戻り値をチェックする。

出典: https://dev.to/bikkisingh/top-10-php-bugs-every-beginner-makes-and-how-to-fix-them-1anh