PHP 4.2 では、その古い慣習が廃止されました。この記事で説明するように、このような変更を行う目的はセキュリティ上の理由です。 PHP がフォーム送信やその他のデータを処理する新しい方法を見て、そうすることでコードの安全性が高まる理由を説明します。
ここで何が問題ですか?
次の PHP スクリプトを見てください。これは、入力されたユーザー名とパスワードが正しい場合に Web ページへのアクセスを承認するために使用されます:
// ユーザー名とパスワードを確認します
if ($username == 'kevin' and $password == 'secret')
$authorized = true
?>
;
ユーザー名とパスワードを入力してください:
それでは、この問題を簡単に解決するにはどうすればよいでしょうか?プログラムの先頭で $authorized をデフォルトで false に設定するだけです。この問題はもう存在しません。 $authorized は完全にプログラム コード内で作成される変数ですが、なぜ開発者は悪意のあるユーザーが送信したすべての変数について心配する必要があるのでしょうか。
PHP 4.2 ではどのような変更が加えられましたか?
PHP 4.2 では、新しい PHP インストールの register_globals オプションはデフォルトでオフになっているため、EGPCS 値 (EGPCS は、Environment、Get、Post、Cookies、Server の略語です。これは、PHP の外部変数ソースの全範囲です)はグローバル変数として作成されません。もちろん、このオプションは手動でオンにすることもできますが、PHP 開発者はオフにすることをお勧めします。その意図を実装するには、他のメソッドを使用してこれらの値を取得する必要があります。
PHP 4.1 以降、EGPCS 値は指定された配列のセットから取得できます:
$_ENV -- システム環境変数が含まれます
$_GET -- クエリ文字列および GET メソッドで送信されたフォーム内の変数が含まれます 変数
$_POST -- POST として送信されたフォームの変数が含まれます
$_COOKIE -- すべての Cookie 変数が含まれます
$_SERVER -- HTTP_USER_AGENT などのサーバー変数が含まれます
$_REQUEST -- $_GET、$_POST、$_COOKIE が含まれます
$_SESSION -- 登録されているすべてのセッション変数が含まれます
PHP 4.1 より前、開発者が register_globals オプション (これは PHP のパフォーマンスを向上させる方法とも考えられていました) をオフにしたとき、これらの変数を取得するには $HTTP_GET_VARS のような迷惑な名前を使用する必要がありました。これらの新しい変数名は短いだけでなく、他の利点もあります。
まず、上記のコードを PHP 4.2 で書き直してみましょう (つまり、 register_globals オプションをオフにします):
$username = $_REQUEST['username'];
$password = $_REQUEST['password'];
// ユーザー名とパスワードを確認します
if ($username == 'kevin' and $パスワード == '秘密')
$authorized = true;
許可されていないユーザーはここでプロンプトが表示されます -> ;p>ユーザー名とパスワードを入力してください:
ご覧のとおり、コードの先頭に次の 2 行を追加するだけです:
$username = $_REQUEST['username'];
$password = $_REQUEST['password ']; ;
$username = $_POST['username'];
$password = $_POST[ 'password '];
これら 2 つの変数を「導入する」ことを除いて、プログラム コードに変更はありません。 register_globals オプションをオフにするだけで、開発者はどのデータが外部 (信頼できない) ソースからのものかをよりよく理解できるようになります。
ここには別の小さな問題があることに注意してください。PHP のデフォルトの error_reporting 設定は依然として E_ALL および ~E_NOTICE であるため、「ユーザー名」と「パスワード」の 2 つの値が送信されていない場合は、それらを取得してみてください。 $_REQUEST 配列または $_POST 配列からこれら 2 つの値を取得しても、エラー メッセージは発生しません。 PHP プログラムで厳密なエラー チェックが必要な場合は、最初にこれらの変数をチェックするためのコードを追加する必要もあります。
しかし、これはより多くのインプットを意味するのでしょうか?
はい、上記のような単純なプログラムでは、PHP 4.2 を使用すると、入力の量が増えることがよくあります。しかし、明るい面も見てみましょう - 結局のところ、プログラムはより安全です。
しかし真面目な話、PHP の設計者はあなたの痛みを完全に無視していたわけではありません。これらの新しい配列には、他の PHP 変数にはない特別な機能があり、完全なグローバル変数です。これはどのように役に立ちますか?まず例を詳しく見てみましょう。
サイト内の複数のページでユーザー名/パスワード引数を使用できるようにするには、ユーザー認証プログラムをインクルード ファイル (protectme.php) に書き込みます:
コードをコピーします
$password = $_POST['password']; / ユーザー名とパスワードを確認してください
if ($username != $authuser または $password != $authpass):
を入力してくださいユーザー名とパスワード:
endif;
コードをコピーします
コードは次のとおりです:
authorize_user( 「ケビン」、「秘密」
;
とてもシンプルで明確ですよね。ここで、自分の目と経験をテストしてみましょう。authorize_user 関数に何が欠けているのでしょうか?
$_POST は関数内でグローバル変数として宣言されていません! php 4.0 では、 register_globals がオンになっている場合、関数内で $username 変数と $password 変数を取得するコード行を追加する必要があります:
function authorize_user($authuser, $authpass)
{
global $username, $password ;
.. .
PHP では、同様の構文を持つ他の言語とは異なり、関数の外部にある変数は、グローバル スコープからのものであることを指定するために、上で説明したように行を追加する必要があります。
PHP 4.0 では、セキュリティを提供するために register_globals がオフになっている場合、$HTTP_POST_VARS 配列を使用してフォームによって送信された値を取得できますが、この配列をグローバル スコープからインポートする必要があります:
function authorize_user($ authuser, $authpass )
{
global $HTTP_POST_VARS;
$username = $HTTP_POST_VARS['username'];
ただし、PHP 4.1 以降のバージョンでは、特別な $_POST 変数が使用されます。 (および上記の他の変数) はすべてのスコープで使用できます。これが、関数内で $_POST 変数をグローバル変数として宣言する必要がない理由です。
function authorize_user($authuser, $authpass)
{
$username = $_POST['username'];
$password = $ _POST[' パスワード'];
これはセッションにどのような影響を与えますか?
特別な $_SESSION 配列の導入は、実際にセッション コードを簡素化するのに役立ちます。セッション変数をグローバル変数として宣言し、どの変数が登録されているかを追跡する代わりに、$_SESSION['varname'] からすべてのセッション変数を簡単に参照できるようになりました。
次に、ユーザー認証の別の例を見てみましょう。今回は、セッションを使用して、サイトに滞在し続けるユーザーが認証されたことを示します。まず、PHP バージョン 4.0 ( register_globals を有効にする) を見てみましょう。
if ($username == 'kevin ' および $password == 'secret')
{
$authorized = true;
?>?php if (!$authorized): ?> !-- ユーザーにログインを促す HTML フォームを表示します -->
そして、最初のプログラムと同様に、このプログラムにもセキュリティ上の脆弱性があり、URL の末尾に ?authorized=1 を追加すると、セキュリティ対策を回避してページのコンテンツに直接アクセスできます。開発者は $authorized をセッション変数として扱い、同じ変数がユーザー入力によって簡単に設定できることを無視できます。
特別な配列 (PHP 4.1) を追加し、register_globals (PHP 4.2) をオフにすると、プログラムは次のようになります:
コードをコピー
コードは次のとおりです:

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
