まず、index.php、router.php、.htaccess ファイルを作成します。
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L,QSA]
ユーザーが router.php に直接アクセスするための URL を入力すると、このコードは 404 応答を表示します。
<?php if (basename($_SERVER['PHP_SELF']) == basename(__FILE__)) { http_response_code(404); die(); }
class Page { protected static bool $Return_404 = true; }
404 ページを返すための静的ブール変数を作成します。デフォルトとして true に設定します。
次に、404 ページの関数を追加します。
protected static function Return_404(): void { (file_exists("./Pages/404.php")) ? require_once "./Pages/404.php" : http_response_code(404); }
ここでは、Pages フォルダー内に 404 ページを配置します。任意のフォルダーに置くことができます。
「ファイル」機能も追加します。
protected static function File(string $file): string { if (!empty($file)) { (str_contains($file, "?")) ? $file = strtok($file, '?') : $file; ($file[strlen($file) - 1] === "/") ? $file = rtrim($file, "/") : $file; } return $file; }
この関数は、リクエスト URL にクエリ文字列または「/」で終わるクエリ文字列が含まれているかどうかを確認し、それを削除します。
「strok」文字列関数を使用して、「?」より前の文字列値を取得します。 「strok」がこのように使用されることを意図していないことはわかっていますが、これは機能し、複雑なアルゴリズムを不必要に実行する必要がなくなります。 「rtrim」文字列関数を使用して、文字列の最後に「/」が含まれている場合はそれを削除します。
class Routes { public static array $Route = array( "" => "Pages/home.php", "/about" => "Pages/about.php", ); }
ここでは、ルーティングを保存するための静的配列を作成します。
この配列には「リクエストされた URL」が含まれます => 「ファイルの場所」。
すべてのページ ファイルを Pages フォルダーに置きます。好きな場所に置くことができます。
Router クラスは、上ですでに作成した Page クラスを拡張します。
「」 => であることに注意してください。 「Pages/home.php」はホームページ用です。
class Router extends Page { }
次に、要求されたファイルが Router クラスに存在するかどうかを確認する関数を作成します。
public static function Run(): void { $requested_file = self::File($_SERVER["REQUEST_URI"]); foreach (Routes::$Route as $request => $file) { if ($requested_file === $request) { if (file_exists($file)) { self::$Return_404 = false; require $file; } else echo "Error"; } } if (self::$Return_404) self::Return_404(); }
この関数は、要求されたファイルが $Route 配列内にあるかどうかを最初に確認します。存在する場合、静的ブール値 $Return_404 が false に設定されるため、404 ページは表示されず、ページ ファイルも取得されません。存在しない場合は、404 ページが返されます。
ファイルは存在するが、Pages フォルダーにファイルがない場合、関数は「エラー」をエコーします。ここで「エラー」をエコーする代わりに 404 ページを表示できます。
<?php if (basename($_SERVER['PHP_SELF']) == basename(__FILE__)) { http_response_code(404); die(); } class Page { protected static bool $Return_404 = true; protected static function Return_404(): void { (file_exists("./Pages/404.php")) ? require_once "./Pages/404.php" : http_response_code(404); } protected static function File(string $file): string { if (!empty($file)) { (str_contains($file, "?")) ? $file = strtok($file, '?') : $file; ($file[strlen($file) - 1] === "/") ? $file = rtrim($file, "/") : $file; } return $file; } } class Router extends Page { public static function Run(): void { $requested_file = self::File($_SERVER["REQUEST_URI"]); foreach (Routes::$Route as $request => $file) { if ($requested_file === $request) { if (file_exists($file)) { self::$Return_404 = false; require $file; } else echo "Error"; } } if (self::$Return_404) self::Return_404(); } } class Routes { public static array $Route = array( "" => "Pages/home.php", "/about" => "Pages/about.php", ); }
index.php では、Router クラスの「Run」関数を使用します。
<!DOCTYPE html> <html lang="en"> <?php require_once "./router.php"; ?> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Router</title> </head> <body> <?php Router::Run(); ?> </body> </html>
ページのすべての HTML コードは「body」タグ内にあります。
最後に、home.php、about.php、404.php を Pages フォルダーに作成します。
home.php
<h1>Home page</h1>
about.php
<h1>about page</h1>
404.php
<h1>404 page</h1>
「xampp」または「PHP サーバー」拡張機能でコードが動作するかどうかを確認します。
エラーが発生した場合は、お気軽にお知らせください。 XD
次の場所で Github リポジトリを確認することもできます。
以上がPHP で単純なページルーターを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。