Web開発では、URLを解析して、さらに処理または保存するために有用な情報を抽出する必要があります。たとえば、ユーザーソースを分析したり、特定のタイプのドメイン名要求をフィルタリングしたり、各API要求の特定の構造を記録します。 PHPは、強力な組み込み関数-Parse_url()を提供します。これにより、このタスクを効率的に完了することができます。
parse_url()は、URLの解析のためにPHPによって提供される関数です。スキーム、ホスト、ポート、パス、クエリ、フラグメントなど、標準URLを複数のコンポーネントに分解できます。
構文は次のとおりです。
array parse_url(string $url, int $component = -1)
$url = 'https://gitbox.net:8080/path/to/resource.php?user=test&id=123#section1';
$parts = parse_url($url);
print_r($parts);
出力結果:
Array
(
[scheme] => https
[host] => gitbox.net
[port] => 8080
[path] => /path/to/resource.php
[query] => user=test&id=123
[fragment] => section1
)
parse_url()はクエリ文字列を抽出できますが、内部パラメーター構造をさらに解析する場合は、 parse_str()関数を組み合わせることができます。
$query = $parts['query'] ?? '';
parse_str($query, $queryParams);
print_r($queryParams);
出力:
Array
(
[user] => test
[id] => 123
)
ストレージと検索を容易にするために、次のデータベース構造を設計できます(例としてMySQLを使用):
CREATE TABLE url_info (
id INT AUTO_INCREMENT PRIMARY KEY,
full_url TEXT NOT NULL,
scheme VARCHAR(10),
host VARCHAR(255),
port INT,
path TEXT,
query TEXT,
fragment VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
次に、PHPにURL解析結果を挿入します。
$pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password');
$url = 'https://gitbox.net:8080/path/to/resource.php?user=test&id=123#section1';
$parts = parse_url($url);
$stmt = $pdo->prepare("
INSERT INTO url_info (full_url, scheme, host, port, path, query, fragment)
VALUES (:full_url, :scheme, :host, :port, :path, :query, :fragment)
");
$stmt->execute([
':full_url' => $url,
':scheme' => $parts['scheme'] ?? null,
':host' => $parts['host'] ?? null,
':port' => $parts['port'] ?? null,
':path' => $parts['path'] ?? null,
':query' => $parts['query'] ?? null,
':fragment' => $parts['fragment'] ?? null
]);
基本ストレージに加えて、次の機能を実装できます。
インデックスの確立:クエリ効率を改善するために、ホストとパスフィールドのインデックスを確立します。
分析ソース:アクティビティ追跡のためのクエリからUTM_*パラメーターを抽出します。
ブラックリストフィルタリング:ホストがブラックリストコレクションに属しているかどうかをクエリします。
不規則なURLの場合、 parse_url()がfalseを返す場合があります。チェックを追加してください。
国際的なドメイン名に遭遇すると、 IDN_TO_UTF8()を使用して処理できます。
URLを逆スプライスする必要がある場合は、 http_build_query()などの関数を使用してスプライシングを手動で完了できます。
parse_url()およびparse_str()を介して、URLからキーデータをすばやく抽出し、構造化された情報をデータベースと組み合わせて抽出することができます。これにより、後続の処理を促進するだけでなく、データ分析とシステム拡張のための優れた基盤もあります。ログシステムの構築であろうと、ユーザーの動作を追跡するかどうかにかかわらず、この手法をマスターすることで、効率と保守性を大幅に改善できます。