ホームページ >バックエンド開発 >PHPチュートリアル >PHPの魔法の引用符とは何ですか
マジック クオートとは:
マジック クオートは、PHP に入力されるデータを自動的に変換するためにプログラムによって使用されます。スクリプトプロセス。オンにすると、すべての ' (一重引用符)、" (二重引用符)、\ (バックスラッシュ)、および NULL 文字は自動的にバックスラッシュでエスケープされます。addslashes() 関数と同じ効果があります。
Magic quote ディレクティブ:
magic_quotes_gpc は HTTP リクエスト データ (GET、POST、COOKIE) に影響します。実行時には変更できません。PHP のデフォルト値は on です。get_magic_quotes_gpc() を参照してください。
magic_quotes_runtime オンにすると、データベースやテキスト ファイルなどの外部ソースからデータを取得して返すほとんどの関数は、バックスラッシュでエスケープされたデータを返します。このオプションは実行時に変更できます。PHP のデフォルト値はオフです。を参照してください。 set_magic_quotes_runtime() および get_magic_quotes_runtime()
magic_quotes_sybase オンにすると、一重引用符を反転するのではなくエスケープするために一重引用符が使用されます。スラッシュ。このオプションは、magic_quotes_gpc を完全にオーバーライドします。両方のオプションがオンになっている場合、同時に、一重引用符は '' にエスケープされます。二重引用符、バックスラッシュ、および NULL 文字はエスケープされません。その値の取得方法は、ini_get() を参照してください。
マジック クオートの役割:
マジック クオートの元々の導入は、SQL インジェクションを防ぐためのセキュリティ上の考慮事項でした。PHP 初心者が知らず知らずのうちに役立つ可能性があります。比較的安全なコードがコード内に記述されていますが、現在、プログラマはこのセキュリティ問題をすでによく認識しています。
マジック クォーテーション マークの欠陥:
移植性: プログラミング時に考慮されるのは、データベース転送メカニズムまたはプリペアド ステートメントを使用してマジック クォーテーション マーク関数を置き換えることです。 get_magic_quotes_gpc() を使用して、それが開かれているかどうかを確認し、それに応じてプログラムすることができます。
パフォーマンス: エスケープされたデータのすべての部分をデータベースに挿入する必要があるわけではないため、 PHP に入力されるデータはエスケープされますが、プログラムの実行効率に一定の影響を及ぼします。実行時にエスケープ関数 (addslashes() など) を呼び出す方が効率的です。php.ini-dist はデフォルトでこのオプションをオンにしていますが、 php.ini-recommended では、主にパフォーマンス上の理由からデフォルトでオフになっています。
不便: すべてのデータをエスケープする必要があるわけではないため、エスケープする必要のない場所でエスケープされたデータが表示されるのは迷惑です。たとえば、フォームから電子メールを送信すると、\' が大量に表示されます。この問題を解決するには、stripslashes () 関数処理を使用できます。
マジック クオートの切り替え:
magic_quotes_gpc は ini_set() では設定できません。magic_quotes_gpc を設定するには 3 つの方法があります。
1. PHP 設定ファイル php.ini を変更します。この方法では、サーバーを変更するには管理者権限が必要ですが、単なる仮想空間の場合は、後の 2 つの方法しか使用できません。
; Magic quotes ; Magic quotes for incoming GET/POST/Cookie data. magic_quotes_gpc = Off ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. magic_quotes_runtime = Off Use Sybase-style magic quotes (escape ' with '' instead of \'). Magic_quotes_sybase = Off
2.htaccessで設定します。これは、サーバーが htaccess をサポートしている場合にのみ使用できます。
php_flag magic_quotes_gpc Off
3. コード内のシールド。この方法は移植性が高くなりますが、効率が最も低いため、サーバー管理権限がある場合は、構成記事を変更して magic_quotes_gpc をオフにすることをお勧めします。
コード例:
<?php if (get_magic_quotes_gpc()) { function stripslashes_deep($value) { $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value); return $value; } $_POST = array_map('stripslashes_deep', $_POST); $_GET = array_map('stripslashes_deep', $_GET); $_COOKIE = array_map('stripslashes_deep', $_COOKIE); $_REQUEST = array_map('stripslashes_deep', $_REQUEST); } ?>
概要:
マジック クオートはもともと SQL インジェクションを防ぐために導入されたもので、開発者にとっては有益です。また、使用時に多くの不便をもたらしますが、現在ではより優れた代替手段が増えているため、まだ php 5.3.0 または php 5.3.0 より前のバージョンで開発している場合は、マジック クオートの使用を避ける必要があります。 PHP 5.4.0 以降は削除されました。
以上がPHPの魔法の引用符とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。