PHP (ハイパーテキスト プリプロセッサ) は、動的な Web サイトやアプリケーションの開発に使用される一般的なサーバー側スクリプト言語です。以下は、PHP の基本的な構文と一般的な機能の一部です。
-
PHP タグ: PHP コードは通常
<?php
、 と?>
タグで囲まれます。例えば:<?php // PHP代码在这里 ?>
-
出力コンテンツ:
echo
ORステートメントを使用してprint
コンテンツをブラウザーに出力します。<?php echo "Hello, World!"; ?>
-
変数: PHP では、変数は
$
シンボルで始まり、その後に変数名が続きます。$name = "John";
-
データ型: PHP は、int、float、string、boolean、配列、オブジェクトなどを含むさまざまなデータ型をサポートします。
-
文字列操作: PHP は、文字列の連結、文字列のインターセプト、文字列の置換など、豊富な文字列操作関数を提供します。
$str1 = "Hello, "; $str2 = "World!"; $result = $str1 . $str2; // 字符串连接
-
条件文:
if
、 、else
およびを使用して、elseif
条件分岐ロジックを実行します。$age = 25; if ($age < 18) { echo "未成年"; } elseif ($age >= 18 && $age < 65) { echo "成年"; } else { echo "老年"; }
-
ループ ステートメント:
for
、while
、などを使用してdo...while
ループ操作を実行します。for ($i = 1; $i <= 5; $i++) { echo "Iteration $i<br>"; }
-
関数: PHP では、特定のタスクを実行するカスタム関数を作成できます。
function greet($name) { echo "Hello, $name!"; } greet("Alice");
-
スーパー グローバル変数: PHP には、フォーム データの処理やセッション管理などに使用される、
$_GET
、$_POST
、などの特別なグローバル変数がいくつかあります。$_SESSION
-
ファイルをインクルードする:
include
ORステートメントを使用して、require
別の PHP ファイルの内容を 1 つの PHP ファイルにインクルードします。include 'header.php';
これは、PHP の基本的な構文と機能の概要を示したものです。PHP には、さまざまなタイプの Web アプリケーションの開発に使用できる強力な標準ライブラリとサードパーティの拡張機能があります。さらに詳しい学習が必要な場合は、PHP の公式ドキュメントを参照するか、オンラインのチュートリアルや書籍を参照してください。
PHP をさらに深く理解する際には、理解する必要がある重要な概念と機能がいくつかあります。
-
配列: PHP はインデックス付き配列と連想配列をサポートします。インデックス付き配列は数値インデックスを使用しますが、連想配列はカスタム キー名を使用します。
$fruits = array("apple", "banana", "cherry"); $person = array("first_name" => "John", "last_name" => "Doe");
-
クラスとオブジェクト: PHP はオブジェクト指向プログラミング (OOP) をサポートしています。クラスとオブジェクトを作成し、データと動作をカプセル化し、継承やポリモーフィズムなどの概念を使用できます。
class Car { public $color; public function start() { echo "Engine started!"; } } $myCar = new Car(); $myCar->color = "blue";
-
例外処理: PHP では
try
、catch
およびステートメントを使用してthrow
例外をキャッチして処理できます。try { // 一些可能引发异常的代码 } catch (Exception $e) { echo "Caught an exception: " . $e->getMessage(); }
-
ファイル操作: PHP は、ファイルの読み取りと書き込みのための一連の関数を提供します。ファイルを開いたり、読み取り、書き込み、閉じたり、ファイルのステータスを確認したりできます。
$file = fopen("example.txt", "r"); $content = fread($file, filesize("example.txt")); fclose($file);
-
データベース接続: PHP は、MySQL、SQLite、PostgreSQL などのさまざまなデータベース接続をサポートしています。クエリを実行し、データベース内のデータを挿入および更新できます。
$conn = new mysqli("localhost", "username", "password", "database"); $result = $conn->query("SELECT * FROM users");
-
セッション管理: PHP を使用すると、ユーザー セッションを作成および管理して、ユーザーのステータスを追跡し、データを保存できます。
session_start(); $_SESSION['user_id'] = 123;
-
セキュリティ:データ検証、SQL インジェクション、クロスサイト スクリプティング攻撃 (XSS) など、PHP のセキュリティ問題に注意する必要があります。
-
自動ロード: PHP はクラスの自動ロードをサポートしているため、各クラス ファイルを手動でインクルードする必要はありません。
spl_autoload_register(function ($class_name) { include $class_name . '.class.php'; });
-
名前空間: PHP は名前空間を使用してクラス名の競合を整理し、回避します。
namespace MyNamespace;
-
Composer: Composer は、サードパーティのライブラリを簡単に導入および管理できるようにする PHP の依存関係管理ツールです。
これらは、大規模な Web アプリケーションをより適切に整理および管理するのに役立つ PHP の高度なテーマです。PHP を学習する最良の方法は、実際のコーディングとプロジェクトの経験を通じてスキルを継続的に向上させることです。同時に、PHP の公式ドキュメントやコミュニティ リソースを参照すると役立ちます。
a:3:{s:4:“名前”;s:4:“ジョン”;s:3:“年齢”;i:30;s:4:“都市”;s:8:“ニューヨーク”; }
このシリアル化された文字列のa:3:{s:4:"name";s:4:"John";s:3:"age";i:30;s:4:"city";s:8:"New York";}
各数字とテキストの意味は次のとおりです。
-
a
: 連想配列であることを示します。連想配列は、キーと値のペアの形式でデータを格納するデータ構造であり、各キーが値に関連付けられています。 -
3
: この連想配列に 3 つのキーと値のペアが含まれていることを示します。 -
s:4:"name"
:最初のキー名を文字列(文字列)で示します。具体的な意味は以下の通りです。s
: これが文字列であることを示します。4
: 文字列の長さが 4 文字であることを示します。"name"
: はキー名の文字列値です。つまり、キー名は「name」です。
-
s:4:"John"
: 最初のキー「name」に対応する値を示します。これも文字列です。具体的な意味は以下の通りです。s
: これが文字列であることを示します。4
: 文字列の長さが 4 文字であることを示します。"John"
: は、キー「name」に対応する文字列値です。つまり、キー「name」の値は「John」です。
-
s:3:"age"
: 2 番目のキー名を表します。これも文字列です。具体的な意味は以下の通りです。s
: これが文字列であることを示します。3
: 文字列の長さが 3 文字であることを示します。"age"
: キー名の文字列値です。つまり、キー名は「age」です。
-
i:30
:2番目のキー「age」に対応する値が整数であることを示します。具体的な意味は以下の通りです。i
: これが整数であることを示します。30
: は、キー「age」に対応する整数値です。つまり、キー「age」の値は整数 30 です。
-
s:4:"city"
: 3 番目のキー名を表します。これも文字列です。具体的な意味は以下の通りです。s
: これが文字列であることを示します。4
: 文字列の長さが 4 文字であることを示します。"city"
: はキー名の文字列値です。つまり、キー名は「city」です。
-
s:8:"New York"
: 3 番目のキー「city」に対応する値を示します。これも文字列です。具体的な意味は以下の通りです。s
: これが文字列であることを示します。8
:文字列の長さが8文字であることを示します。"New York"
: は、キー「city」に対応する文字列値です。つまり、キー「city」の値は「New York」です。
このシリアル化された文字列は、3 つのキーと値のペアを含む連想配列を記述します。キー名は「name」、「age」、「city」で、対応する値はそれぞれ「John」、「30」、「New York」です。 。このシリアル化形式は、データをファイルに保存したり、ネットワーク経由で送信したりするためによく使用されます。
データ型: シリアル化された文字列では、各要素にはそのデータ型を識別するプレフィックスが付いています。一般的なデータ型は次のとおりです。
s: 文字列を表します。
i:整数(整数)を表す。
d:浮動小数点数(double)を表します。
b: ブール値を表します。
a:連想配列(連想配列)を表します。
O:オブジェクトを示します。
N:ナル値を示します。
キー名: シリアル化された文字列では、連想配列のキー名もシリアル化され、文字列の形式で保存されます。キー名は通常、二重引用符で囲まれます。たとえば、 s:4:"name" は、キー名が "name" であることを意味します。
値の型: データ型のプレフィックスの後にコロンが続き、データ型に応じて値の長さまたはその他の特定の情報が続きます。たとえば、s:4:"John" は、長さが 4、値が "John" の文字列型を表します。整数、浮動小数点数などの場合、このセクションには対応する値が含まれます。
8 つのマジック変数:
PHP は、実行するスクリプトに多数の事前定義された定数を提供します。
ただし、多くの定数はさまざまな拡張ライブラリによって定義されており、これらの拡張ライブラリが動的にロードされるかコンパイル時に組み込まれるときにのみ表示されます。
コード内の位置に応じて値が変化するマジック定数が 8 つあります。
たとえば、LINEの値は、スクリプト内のどの行にあるかによって異なります。これらの特別な定数は大文字と小文字が区別されず、次のとおりです。
LINE
ファイル内の現在の行番号。
例
<?php echo 'これは行 " ' . __LINE__ . ' "'; ?>上記の例の出力結果は次のとおりです。
これは行「2」です
FILE
ファイルの絶対パスとファイル名。インクルードされたファイル内で使用された場合、インクルードされたファイルの名前を返します。
PHP 4.0.2 以降、FILE には常に絶対パス (シンボリック リンクの場合は解決された絶対パス) が含まれますが、これより前のバージョンでは相対パスが含まれる場合がありました。
例:
例
<?php echo 'ファイルは " ' . __FILE__ . ' " '; ?>上記の例の出力結果は次のとおりです。
ファイルは「E:\wamp\www\test\index.php」にあります。
DIR
ファイルが配置されているディレクトリ。インクルードされたファイル内で使用された場合、インクルードされたファイルが配置されているディレクトリを返します。
これは dirname( FILE )と同等です。ルート ディレクトリでない限り、ディレクトリ名には末尾のスラッシュは含まれません。(PHP 5.3.0で追加)
例
<?php echo 'ファイルは " ' . __DIR__ . ' " '; ?>上記の例の出力結果は次のとおりです。
ファイルは「 E:\wamp\www\test 」にあります。
FUNCTION
関数名 (PHP 4.3.0 で新しく追加されました)。PHP 5 以降、この定数は定義されたとおりの関数の名前 (大文字と小文字を区別) を返します。PHP 4 では、この値は常に小文字です。
例
<?php function test() { echo '関数名:' . __FUNCTION__ ; } test(); ?>上記の例の出力結果は次のとおりです。
関数名: テスト
CLASS
クラスの名前 (PHP 4.3.0 の新機能)。PHP 5 以降、この定数は定義されたとおりのクラスの名前 (大文字と小文字を区別) を返します。
PHP 4 では、値は常に小文字です。クラス名には、それが宣言されているスコープが含まれます (例: Foo\Bar)。PHP 5.4 以降、CLASS はトレイトに対しても機能することに注意してください。特性メソッドで使用される場合、CLASS は特性メソッドを呼び出すクラスの名前になります。
例
<?php class test { function _print() { echo 'クラス名:' . __CLASS__ . " "; echo '関数名:' . __FUNCTION__ ; } } $t = new test(); $t->_print( ); ?>
上記の例の出力結果は次のとおりです。
クラス名:test
関数名:_print
TRAIT
トレイト名 (PHP 5.4.0 の新機能)。PHP 5.4.0 以降、PHP はトレイトと呼ばれるコード再利用の方法を実装しました。
トレイト名には、それが宣言されているスコープが含まれます (例: Foo\Bar)。
基本クラスから継承されたメンバーは、挿入された SayWorld トレイトの MyHelloWorld メソッドによってオーバーライドされます。その動作は、MyHelloWorld クラスで定義されたメソッドと一致しています。優先順位としては、現在のクラスのメソッドが特性メソッドをオーバーライドし、特性メソッドが基本クラスのメソッドをオーバーライドします。
例
<?php class Base { public functionsayHello() { echo 'Hello '; } } 特性 SayWorld { パブリック関数 SayHello() { 親::sayHello(); 「ワールド!」をエコーします。} } class MyHelloWorld extends Base {SayWorld を使用します。$o = 新しい MyHelloWorld(); $o->sayHello(); ?>上記のルーチンは次を出力します。
「こんにちは世界」
METHOD
クラスのメソッド名 (PHP 5.0.0 で追加)。定義されたとおりのメソッドの名前 (大文字と小文字を区別) を返します。
例:
例
<?php function test() { echo '関数名は:' . __METHOD__ ; } test(); ?>上記の例の出力結果は次のとおりです。
関数名: テスト
NAMESPACE
現在のネームスペースの名前 (大文字と小文字が区別されます)。この定数はコンパイル時に定義されます (PHP 5.3.0 の新機能)。
例:
例
<?php namespace MyProject; echo '名前空間は: "', __NAMESPACE__, '"'; // 出力 "MyProject" ?>上記の例の出力結果は次のとおりです。
名前空間は「MyProject」です。
#前述したように、json は比較的安全なシリアル化方法ですが、XSS 攻撃を防ぐために、以下では XSS を導入します。
クロスサイト スクリプティング (XSS) は、攻撃者が Web ページに悪意のあるスクリプトを挿入し、被害者のブラウザによって実行されることを可能にする一般的なネットワーク セキュリティの脆弱性です。これらのスクリプトは通常 JavaScript ですが、他のスクリプト言語を使用することもできます。XSS 攻撃の主な目的は、ユーザー情報、セッション トークン、Cookie などの機密データを盗むこと、またはユーザーとして悪意のあるリクエストを送信するなどの悪意のある操作を実行することです。
XSS 攻撃は通常、次の 3 つの主要なタイプに分類されます。
-
保存された XSS:攻撃者は、悪意のあるスクリプトをデータベースやファイルなどのサーバーに保存します。その後、これらの悪意のあるスクリプトが含まれるページにユーザーがアクセスすると、それらのスクリプトが読み込まれて実行され、攻撃が引き起こされます。保存型 XSS 攻撃は通常、フォーラム、掲示板、ブログのコメントなどで発生します。
-
反射型 XSS:攻撃者は、悪意のあるスクリプトをパラメータとして URL に追加し、ユーザーがこれらのパラメータを含む悪意のあるリンクをクリックすると、被害者のブラウザでスクリプトが実行されます。反射型 XSS 攻撃には、通常、ユーザーを誘導して悪意のあるリンクをクリックさせることが含まれます。
-
DOM ベースの XSS:この攻撃にはサーバーは関与しません。悪意のあるスクリプトはページの DOM 構造を変更し、ユーザーのブラウザで実行されます。攻撃者は通常、URL フラグメントまたはその他のページ コンテンツを変更することによって DOM タイプ XSS をトリガーします。
XSS 攻撃を防ぐ方法には次のようなものがあります。
-
入力の検証とフィルタリング:すべてのユーザー入力データに対して、厳密な検証とフィルタリングが実行され、合法で信頼できるデータのみが受け入れられることが保証されます。
-
出力エンコーディング:ユーザー入力または動的に生成されたコンテンツを HTML、JavaScript、またはその他のコンテキストに挿入する前に、適切
<
な出力エンコーディングを使用して、 、 、 などの特殊文字をエスケープします。>
&
-
コンテンツ セキュリティ ポリシー (CSP): CSP ヘッダーを構成して、Web ページにロードできるドメイン名とリソースを制限し、悪意のあるスクリプトが実行される機会を減らします。
-
Web アプリケーション ファイアウォール (WAF) を使用する: WAF を使用して、既知の XSS 攻撃パターンを検出し、ブロックします。
-
定期的な更新とバグ修正:既知の XSS 脆弱性が確実に修正されるように、アプリケーションと関連ライブラリを適時に更新します。
-
教育とトレーニング:開発者とユーザーに XSS 攻撃に関するトレーニングを提供し、セキュリティ意識を高めます。
-
厳密なセッション管理:安全なセッション管理手法を使用して、セッション ID が攻撃に対して脆弱でないことを確認します。
XSS 攻撃は一般的ですが、防止可能なセキュリティ問題です。適切なセキュリティ対策と実践により、XSS 攻撃のリスクを効果的に軽減できます。