初心者が陥りやすいPHPのバグTOP10
コードを書き、ページをリフレッシュする。すると、真っ白な画面が表示される。
これは、PHPがデフォルトでエラーを静かに(表示せずに)終了してしまうために起こります。エラーが見えなければ、修正することもできません。
開発を始める際は、ファイルの先頭に以下の行を追加してください。
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
これにより、PHPに何が間違っているかを表示させることができます。ただし、本番環境では使用しないでください。
以下に、よくある10個のバグとその修正方法を紹介します。
セミコロンの欠落 PHPは文の終わりにセミコロンを必要とします。もし忘れてしまうと、スクリプトが停止します。 修正方法:常に行の終わりにセミコロンを付けてください。
緩やかな比較
==演算子は比較の前に型を変換します。これが誤った結果を招くことがあります。 修正方法:===を使用してください。これにより、値と型の両方がチェックされます。未定義の変数 作成していない変数を使用すると、ロジックエラーが発生します。 修正方法:Null合体演算子を使用してください。
$name = $_GET['name'] ?? 'Guest';グローバル変数のスコープ 関数は、その外側にある変数を見ることができません。 修正方法:変数を引数として関数に渡してください。
SQLインジェクション ユーザーの入力を直接クエリに含めるのは危険です。攻撃者によってデータが盗まれる可能性があります。 修正方法:プレースホルダを使用したプリペアドステートメントを使用してください。
クロスサイトスクリプティング (XSS) ユーザーの入力をそのまま画面に出力すると、ブラウザ上で悪意のあるスクリプトが実行される可能性があります。 修正方法:すべての出力に対して
htmlspecialchars()を使用してください。ヘッダーエラー ブラウザにテキストやスペースを送信した後に、ヘッダーを送信することはできません。 修正方法:
header()の呼び出しは一番上に記述してください。リダイレクトの後は必ずexit()を使用してください。フォームキーの欠落 存在しないフォームキーにアクセスするとエラーが発生します。 修正方法:Null合体演算子を使用して、デフォルト値を設定してください。
include と require の違い
includeコマンドは、ファイルが見つからない場合に警告を出すだけです。スクリプトはそのまま実行され、後でクラッシュします。 修正方法:データベース接続などの重要なファイルにはrequire_onceを使用してください。戻り値の未チェック 多くのPHP関数は、失敗したときに
falseを返します。そのfalseの値を次のステップで使用すると、クラッシュの原因になります。 修正方法:結果を使用する前に、関数がfalseを返していないか確認してください。
より良いコードを書くためのまとめ:
• 開発環境ではエラーレポートを有効にする。
• == の代わりに === を使用する。
• 戻り値をチェックする。
• すべてのユーザー入力をサニタイズする。
出典: https://dev.to/bikkisingh/top-10-php-bugs-every-beginner-makes-and-how-to-fix-them-1anh