- WebDev
- What is CSS?
- What is Javascript?
- What is HTML?
- What is PHP?
- Class
- $_SERVER
- JWT
- PHP Email
- REST API
- OAuth
- Configuration Files
- PHP Strings
- Youtube Templates
- Session - MySQL Handler
- PHP Router
- function keygen()
- MySQL
- Daemon Process
- Symbolic Links
- Date & Time
- Timezone
- File Upload
- What is XML?
- What is HTTP?
- What is SEO?
- What is the Internet?
- What is Java?
- What is RSS?
- What is a vCard?
- UKRAINE
- What is RFC?
- What is Apache?
PHP Router
PHP can be written to route webpages with the help of an .htaccess file
<htaccess>
RewriteEngine On
RewriteCond %{REQUEST_URI} !(.png|.jpg|.webp|.gif|.jpeg|.zip|.css|.svg|.js)$
RewriteRule (.*) routes.php [QSA,L]
</htaccess>
session_start();
function get($route, $path_to_include){
if( $_SERVER['REQUEST_METHOD'] == 'GET' ){ route($route, $path_to_include); }
}
function post($route, $path_to_include){
if( $_SERVER['REQUEST_METHOD'] == 'POST' ){ route($route, $path_to_include); }
}
function put($route, $path_to_include){
if( $_SERVER['REQUEST_METHOD'] == 'PUT' ){ route($route, $path_to_include); }
}
function patch($route, $path_to_include){
if( $_SERVER['REQUEST_METHOD'] == 'PATCH' ){ route($route, $path_to_include); }
}
function delete($route, $path_to_include){
if( $_SERVER['REQUEST_METHOD'] == 'DELETE' ){ route($route, $path_to_include); }
}
function any($route, $path_to_include){ route($route, $path_to_include); }
function route($route, $path_to_include){
// Callback function
if( is_callable($path_to_include) ){
call_user_func($path_to_include);
exit();
}
$ROOT = $_SERVER['DOCUMENT_ROOT'];
if($route == "/404"){
include_once("$ROOT/$path_to_include");
exit();
}
$request_url = filter_var($_SERVER['REQUEST_URI'], FILTER_SANITIZE_URL);
$request_url = rtrim($request_url, '/');
$request_url = strtok($request_url, '?');
$route_parts = explode('/', $route);
$request_url_parts = explode('/', $request_url);
array_shift($route_parts);
array_shift($request_url_parts);
if( $route_parts[0] == '' && count($request_url_parts) == 0 ){
include_once("$ROOT/$path_to_include");
exit();
}
if( count($route_parts) != count($request_url_parts) ){ return; }
$parameters = [];
for( $__i__ = 0; $__i__ < count($route_parts); $__i__++ ){
$route_part = $route_parts[$__i__];
if( preg_match("/^[$]/", $route_part) ){
$route_part = ltrim($route_part, '$');
array_push($parameters, $request_url_parts[$__i__]);
$$route_part=$request_url_parts[$__i__];
}
else if( $route_parts[$__i__] != $request_url_parts[$__i__] ){
return;
}
}
include_once("$ROOT/$path_to_include");
exit();
}
function out($text){echo htmlspecialchars($text);}
function set_csrf(){
if( ! isset($_SESSION["csrf"]) ){ $_SESSION["csrf"] = bin2hex(random_bytes(50)); }
echo '<input type="hidden" name="csrf" value="'.$_SESSION["csrf"].'">';
}
function is_csrf_valid(){
if( ! isset($_SESSION['csrf']) || ! isset($_POST['csrf'])){ return false; }
if( $_SESSION['csrf'] != $_POST['csrf']){ return false; }
return true;
}
require_once("{$_SERVER['DOCUMENT_ROOT']}/router.php");
// ##################################################
// ##################################################
// ##################################################
// Static GET
// In the URL -> http://localhost
// The output -> Index
get('/', 'index.php');
// Dynamic GET. Example with 1 variable
// The $id will be available in user.php
get('/user/$id', 'user.php');
// Dynamic GET. Example with 2 variables
// The $name will be available in user.php
// The $last_name will be available in user.php
get('/user/$name/$last_name', 'user.php');
// Dynamic GET. Example with 2 variables with static
// In the URL -> http://localhost/product/shoes/color/blue
// The $type will be available in product.php
// The $color will be available in product.php
get('/product/$type/color/:color', 'product.php');
// Dynamic GET. Example with 1 variable and 1 query string
// In the URL -> http://localhost/item/car?price=10
// The $name will be available in items.php which is inside the views folder
get('/item/$name', 'views/items.php');
// ##################################################
// ##################################################
// ##################################################
// any can be used for GETs or POSTs
// For GET or POST
// The 404.php which is inside the views folder will be called
// The 404.php has access to $_GET and $_POST
any('/404','views/404.php');
- Source:
- https://phprouter.com