13 āĻŦāĻāĻ° āĻŦāĻ¯āĻŧāĻ¸ā§ āĻ˛āĻŋāĻā§āĻ āĻ¸āĻāĻā§āĻˇāĻŋāĻĒā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻā§āĻ¨ āĻ˛āĻā§āĻāĻž āĻ¨ā§āĻ, āĻ¤āĻžāĻ āĻ¨āĻž? āĻāĻāĻāĻ¨ āĻļāĻŋāĻā§āĻˇāĻžāĻ¨āĻŦāĻŋāĻļ, āĻāĻŦāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻ¨ āĻļāĻŋāĻā§āĻˇāĻžāĻ¨āĻŦāĻŋāĻļ āĻ¨āĻ¯āĻŧ, āĻāĻŋāĻā§ āĻ¨āĻ¤ā§āĻ¨ āĻĢā§āĻ°ā§āĻŽāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻļā§āĻāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¨āĻŋāĻā§āĻ° āĻ˛āĻŋāĻā§āĻ āĻā§āĻŽāĻžāĻ° āĻ˛ā§āĻāĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻž āĻāĻāĻŋāĻ¤āĨ¤ āĻ¯āĻž āĻāĻŽāĻŋ āĻāĻ°ā§āĻāĻŋāĨ¤ āĻāĻŽāĻŋ āĻāĻŋ āĻŦāĻ˛āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ - āĻĒāĻā§āĻāĻŽ āĻŦā§āĻāĻ¸ā§āĻā§āĻ°ā§āĻ¯āĻžāĻĒ, āĻāĻāĻāĻŋ āĻāĻŽ āĻāĻ°ā§āĻŦāĻŋ āĻĢā§āĻ°ā§āĻŽāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻāĻŦāĻ āĻāĻ¤ā§āĻŽāĻžāĻ° āĻāĻāĻāĻŋ āĻā§āĻāĻ°āĻžāĨ¤
āĻāĻāĻžāĻ¨ā§
āĻĢā§āĻ°ā§āĻŽāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ, āĻĄāĻžāĻ¨?
āĻ
āĻŦāĻļā§āĻ¯āĻ āĻ˛āĻžāĻ°āĻžāĻā§āĻ˛ āĻāĻŦāĻ āĻāĻ° āĻŽāĻ¤ā§ āĻ¨āĻ¯āĻŧ - āĻāĻ āĻāĻŽāĻ°āĻž 65 āĻāĻŋāĻ˛ā§āĻŦāĻžāĻāĻ āĻĻāĻŋāĻ¯āĻŧā§ āĻāĻžāĻ āĻāĻ°āĻŦ
#ŅĐžŅŅиĐŊĐŗ вО ФĐģĐ°ŅĐēĐĩ
@app.route('/')
def hello_world():
return 'Hello, World!'
//ŅĐžŅŅиĐŊĐŗ в ĐĐąĐĩСĐļиŅĐĩĐŊĐŊĐžĐŧ
$f3->route('GET /',
function() {
echo 'Hello, world!';
}
);
āĻ āĻŋāĻ āĻāĻā§, āĻā§āĻ˛ā§ āĻ¯āĻžāĻāĨ¤ āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°ā§āĻ¨
āĻāĻāĻžāĻ¨ā§ āĻ¸āĻŦāĻāĻŋāĻā§ āĻ āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¸āĻšāĻ - āĻĢā§āĻ˛ā§āĻĄāĻžāĻ°ā§ ui āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻžāĻā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻŋāĻ āĻāĻā§, āĻŦāĻž, āĻ¸āĻšāĻāĻāĻžāĻŦā§ āĻŦāĻ˛āĻ¤ā§ āĻā§āĻ˛ā§, āĻāĻĒāĻā§āĻ°ā§āĻĄ āĻāĻ°āĻž HTML āĻā§āĻŽāĻĒā§āĻ˛ā§āĻ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯āĻž āĻāĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ āĻĻā§āĻāĻžāĻŦ āĻ¯āĻāĻ¨ āĻ¤āĻžāĻ°āĻž āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ URL āĻĒāĻ°āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°ā§āĨ¤
āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻžāĻĻā§āĻ° "āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨" āĻāĻ° āĻāĻā§āĻāĻžāĻ˛ āĻ°āĻ¯āĻŧā§āĻā§:
<?php
//ФаКĐģ: index.php
// Kickstart the framework
$f3=require('lib/base.php');
$f3->set('DEBUG', 1);
if ((float)PCRE_VERSION<8.0)
trigger_error('PCRE version is out of date');
$f3->config('config.ini');
//ĐĐĐĄĐŦ ĐĐĄĐĸĐĐĐŦĐĐĐ ĐĐĐ ĐĐŖĐĐĐ ĐĐĐĄĐĐĸĐŦ ĐĐĐĐĄĐŦ
$f3->run();
āĻļā§āĻ°ā§ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻ¤āĻā§āĻā§āĻ āĻāĻžāĻ¨āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻ° āĻā§āĻĄāĻŋāĻ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻ¯āĻžāĻ!
[āĻāĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻāĻŋāĻšā§āĻŽ āĻĒā§āĻ
āĻŽā§āĻ˛ āĻĒāĻžāĻ¤āĻž āĻĻāĻŋāĻ¯āĻŧā§ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻ¯āĻžāĻāĨ¤ āĻ¯ā§āĻā§āĻ¤āĻŋāĻ, āĻĄāĻžāĻ¨?
//ФаКĐģ: index.php
$f3->route('GET /',
function($f3) { //ŅŅОйŅ иŅĐŋĐžĐģŅСОваŅŅ ŅŅĐŊĐēŅии F3 ĐŋĐĩŅĐĩĐ´Đ°ĐĩĐŧ ĐĩĐŗĐž в ŅĐžŅŅ
$view = new View; // ŅОСдаĐĩĐŧ вŅŅŅĐēŅ
echo $view->render('home.htm'); //ŅĐĩĐŊĐ´ĐĩŅиĐŧ ŅĐ°ĐąĐģĐžĐŊ
}
);
āĻāĻāĻ¨ āĻāĻĒāĻ¨āĻŋ āĻāĻ āĻā§āĻŦ āĻā§āĻŽāĻĒā§āĻ˛ā§āĻ āĻ˛āĻŋāĻāĻ¤ā§ āĻšāĻŦā§. āĻ¸āĻ°āĻ˛āĻ¤āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻāĻŋ
āĻĢā§āĻ˛ā§āĻĄāĻžāĻ°ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻā§āĻŽāĻĒā§āĻ˛ā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻž āĻāĻāĻāĻ, āĻ āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ āĻ¤āĻžāĻ°āĻž āĻ¨āĻž āĻāĻžāĻ āĻžāĻŽā§āĻ° āĻāĻžāĻā§ āĻĻā§āĻļā§āĻ¯āĻŽāĻžāĻ¨
<!-- ФаКĐģ: ui/home.htm -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="<?php echo $ENCODING; ?>" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>ĐиŅĐĩĐŧ (ĐēОд), ŅĐžĐēŅĐ°ŅĐ°ĐĩĐŧ (ŅŅŅĐģĐēи)!</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css" integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I" crossorigin="anonymous">
</head>
<body class="text-center bg-dark text-light"> <!-- ŅĐĩĐŧĐŊĐ°Ņ ŅĐĩĐŧĐ° ;) -->
<!-- ĐŧĐĩĐŊŅŅĐēĐ° -->
<nav class="m-2">
<ul class="nav nav-pills justify-content-center">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">ĐĐģавĐŊĐ°Ņ</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">ĐĄŅĐ°ŅŅŅ ĐŊĐ° ĐĨĐ°ĐąŅĐĩ</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://nikonovs.ru">ХОСдаŅĐĩĐģŅ</a>
</li>
</ul>
</nav>
<div class="container">
<h1>ĐĐžŅĐžŅĐēиĐĩ ŅŅŅĐģĐēи ŅĐļĐĩ СдĐĩŅŅ.</h1>
<!-- ĐŅĐ´ĐĩĐŧ ĐžŅĐŋŅавĐģŅŅŅ Đ´Đ°ĐŊĐŊŅĐĩ POST-СаĐŋŅĐžŅĐžĐŧ ĐŊĐ° /newLink -->
<form class="mt-5 mb-3" action="/bn/newLink/" method="POST">
<div class="row justify-content-center">
<div class="col-auto">
<label for="inputLink" class="col-form-label">ĐвĐĩди ŅŅŅĐģĐēŅ:</label>
</div>
<div class="col-auto">
<input required placeholder="https://" type="url" name="link" id="inputLink" class="form-control mb-1" aria-describedby="inputLink">
</div>
<div class="col-auto">
<button type="submit" class="btn btn-outline-primary">ĐĄĐžĐēŅĐ°ŅиŅŅ!</button>
</div>
</div>
</form>
<!-- ĐŊĐĩĐŧĐŊĐžĐŗĐž -->
<p class="text-left m-auto mb-5" style="max-width: 30rem;">Lorem ipsum dolor sit, amet consectetur adipisicing elit. Omnis illum molestiae hic fugiat molestias nemo, architecto beatae repellat ullam exercitationem non ab, necessitatibus maxime quod iure ipsa quam quos! Reprehenderit. Lorem ipsum dolor, sit amet consectetur adipisicing elit. Necessitatibus eos sapiente voluptates veniam sequi delectus totam tenetur praesentium obcaecati. Repudiandae quisquam, ipsa ullam corrupti molestiae minima optio nihil est modi?</p>
<footer class="m-2">ĐĄĐ´ĐĩĐģĐ°ĐŊĐž Ņ <img width="20" height="20" src="https://image.flaticon.com/icons/svg/833/833472.svg" alt="ĐģŅйОвŅŅ">, <a href="https://v5.getbootstrap.com/">ĐŋŅŅŅĐŧ Bootstrap'ĐžĐŧ</a> и <a href="https://fatfreeframework.com/">ĐąĐĩС ĐļиŅĐ°</a></footer>
</div>
</body>
</html>
āĻāĻ āĻ¸āĻŦ, āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻĒā§āĻˇā§āĻ āĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻžāĻ āĻāĻ°āĻā§. āĻĢāĻ°ā§āĻŽāĻāĻŋ āĻāĻāĻāĻŋ āĻ˛āĻŋāĻā§āĻ āĻ¸āĻš āĻāĻāĻāĻŋ POST āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻĒāĻžāĻ āĻžāĻ¯āĻŧ āĻ¯āĻž āĻā§āĻ āĻāĻ°āĻž āĻĻāĻ°āĻāĻžāĻ°ā§ˇ
āĻāĻāĻ¨ āĻŽāĻāĻžāĻ° āĻ
āĻāĻļ āĻāĻ¸ā§ (āĻ¨āĻž)āĨ¤
āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻžāĻ āĻāĻ°āĻž
āĻāĻ¸ā§āĻ¨ āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ - MySQLāĨ¤ āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ PhpMyAdmin āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻĨāĻžāĻā§, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨ "linker" āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻ SQL āĻāĻžāĻ˛āĻžāĻ¨:
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
CREATE TABLE IF NOT EXISTS `links` (
`code` varchar(4) NOT NULL,
`link` varchar(1000) NOT NULL,
`hits` int(255) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `links`
ADD UNIQUE KEY `code` (`code`);
āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ˛āĻŋāĻā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻĻā§āĻ° 3āĻāĻŋ āĻā§āĻˇā§āĻ¤ā§āĻ° āĻĨāĻžāĻāĻŦā§:
- āĻā§āĻĄ āĻšāĻ˛ āĻĄā§āĻŽā§āĻ¨ā§āĻ° āĻĒāĻ°ā§ āĻāĻāĻāĻŋ āĻāĻ˛ā§āĻŽā§āĻ˛ā§ 4 āĻ āĻā§āĻˇāĻ° āĻ¯āĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻĒā§āĻ¨āĻāĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°āĻž āĻšāĻŦā§, āĻ¯ā§āĻŽāĻ¨ example.com/ABC1
- āĻ˛āĻŋāĻā§āĻ - āĻā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĻ¨āĻŋ āĻ˛āĻŋāĻā§āĻāĨ¤
- āĻšāĻŋāĻ - āĻ¸āĻāĻā§āĻˇāĻŋāĻĒā§āĻ¤ āĻ˛āĻŋāĻā§āĻā§ āĻā§āĻ˛āĻŋāĻā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻžāĨ¤
āĻāĻŽāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻ°ā§āĻŦāĻŋ āĻāĻžāĻĄāĻŧāĻž āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻ¨ā§āĻ¤āĻŋāĻāĻŋ āĻ¸āĻāĻā§āĻˇā§āĻĒā§ āĻŦāĻ˛āĻŦāĨ¤
<?php
//ŅĐŊĐ°ŅĐ°ĐģĐ° ĐŊŅĐļĐŊĐž ĐŋОдĐēĐģŅŅиŅŅŅŅ Đē ĐĐ
$db = new DBSQL(
'mysql:host=localhost;port=3306;dbname=linker',
'root',
''
);
//ĐĐ°ĐģŅŅĐĩ ĐĩŅŅŅ два ваŅиаĐŊĐ´Đ° ŅайОŅŅ Ņ Đ´Đ°ĐŊĐŊŅĐŧи:
//ĐĐžĐļĐŊĐž ŅŅŅĐ°ĐŊОвиŅŅ ĐŋĐĩŅĐĩĐŧĐĩĐŊĐŊŅŅ в ФŅĐĩĐšĐŧвОŅĐē c ĐŋĐžĐŧĐžŅŅŅ ОйŅŅĐŊĐžĐŗĐž SQL-СаĐŋŅĐžŅĐ°:
$f3->set('result', $db->exec('SELECT * FROM wherever'));
//ĐžĐŊи ĐąŅĐ´ŅŅ Đ´ĐžŅŅŅĐŋĐŊŅ в ŅĐ°ĐąĐģĐžĐŊĐ°Ņ
, ĐēĐ°Đē <?= $resul ? >
//Đ ĐŧĐžĐļĐŊĐž иŅĐŋĐžĐģŅСОваŅŅ вŅŅŅĐžĐĩĐŊĐŊŅĐš SQL Mapper:
$row = new DBSQLMapper($db, 'links');
$row->load(array('link="https://habrahabr.ru"')); //ŅĐĩĐŋĐĩŅŅ иС ŅŅĐžĐŗĐž ОйŅĐĩĐēŅĐ° Đ´ĐžŅŅŅĐŋĐŊŅ вŅĐĩ ĐēĐžĐģĐžĐŊĐēи ŅŅŅĐžĐēи, ĐŗĐ´Đĩ ŅŅŅĐģĐēĐ° ĐŊĐ° ĐĨĐ°ĐąŅ:
$row_value = $row->somerow; //ĐĐžŅ ŅĐ°Đē
// ĐŅŅĐĩŅŅŅвĐĩĐŊĐŊĐž ĐŧĐžĐļĐŊĐž иСĐŧĐĩĐŊŅŅŅ СĐŊĐ°ŅĐĩĐŊиŅ:
$row->link = 'https://habr.com';
$row->save(); //иСĐŧĐĩĐŊĐĩĐŊиŅ ĐŊŅĐļĐŊĐž ŅĐžŅ
ŅĐ°ĐŊиŅŅ, Đ° ŅŅĐž вŅ Đ´ŅĐŧĐ°Đģи
// йОĐģŅŅĐĩ иĐŊŅĐžŅĐŧĐ°Ņии ĐŋĐž ŅайОŅĐĩ Ņ ĐĐ Đ´ĐžŅŅŅĐŋĐŊĐž СдĐĩŅŅ: https://a.nikonovs.ru/MPHR ĐĐ°ŅŅĐžŅŅĐĩĐģŅĐŊĐž ŅĐĩĐēĐžĐŧĐĩĐŊĐ´ŅŅ ĐŋŅĐžŅиŅĐ°ŅŅ, Ņ
ĐžŅŅĐąŅ Ņ ĐŋĐžĐŧĐžŅŅŅ ĐŋĐĩŅĐĩвОдŅиĐēĐ°, вŅŅŅĐžĐĩĐŊĐŊĐžĐŗĐž в ĐąŅĐ°ŅСĐĩŅ.
?>
āĻāĻ¸ā§āĻ¨ āĻ¸āĻāĻā§āĻˇāĻŋāĻĒā§āĻ¤ āĻāĻ°āĻž āĻļā§āĻ°ā§ āĻāĻ°āĻŋāĨ¤
āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ˛āĻŋāĻā§āĻ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻāĻŋāĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨ āĻ¸ā§āĻāĻ, āĻ¯āĻž āĻŽā§āĻ˛ āĻĒā§āĻˇā§āĻ āĻžāĻ¯āĻŧ āĻĢāĻ°ā§āĻŽ āĻĨā§āĻā§ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻ°āĻŦā§āĨ¤
āĻĒā§āĻ°āĻĨāĻŽā§, āĻāĻ¸ā§āĻ¨ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ, āĻ¤āĻŦā§ āĻĒā§āĻ°āĻĨāĻŽ (home.htm) āĻā§āĻŽāĻĒā§āĻ˛ā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻā§āĻŦ āĻŽāĻŋāĻ˛ - "newLink.htm".
āĻ¸ā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻ¸āĻāĻā§āĻˇāĻŋāĻĒā§āĻ¤ āĻ˛āĻŋāĻā§āĻ āĻāĻŦāĻ āĻāĻāĻŋāĻ¤ā§ āĻā§āĻ˛āĻŋāĻā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻž āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻŦ (āĻāĻ "āĻĒāĻ°āĻŋāĻ¸āĻāĻā§āĻ¯āĻžāĻ¨" āĻāĻŦāĻžāĻ° āĻĻā§āĻāĻ¤ā§, āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻŦāĻžāĻ° āĻāĻāĻ āĻ˛āĻŋāĻā§āĻāĻāĻŋ āĻā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ - āĻ āĻŋāĻāĻžāĻ¨āĻžāĻāĻŋ āĻāĻāĻ āĻĨāĻžāĻāĻŦā§)āĨ¤
āĻāĻāĻāĻĒā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§, āĻāĻŽāĻ°āĻž "āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻĒāĻžāĻ¸āĻŋāĻ" āĻā§āĻļāĻ˛āĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦ:
<?php
//ФаКĐģ: ĐŊĐĩŅ (ĐŋŅиĐŧĐĩŅ)
//ŅŅŅĐ°ĐŊавĐģиваĐĩĐŧ ĐŋĐĩŅĐĩĐŧĐĩĐŊĐŊŅŅ в index'Đĩ и ŅĐĩĐŊĐ´ĐĩŅиĐŧ ŅĐ°ĐąĐģĐžĐŊ
$f3->set('link', $shorted_link);
$view = new View;
echo $view->render('newLink.htm');
//ŅĐĩĐŋĐĩŅŅ в ŅĐ°ĐąĐģĐžĐŊĐĩ ĐŧĐžĐļĐŊĐž иŅĐŋĐžĐģŅСОваŅŅ:
<?= $link ?>
āĻāĻŦāĻ āĻāĻāĻžāĻ¨ā§ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻāĻā§ newLink.html:
<!-- ФаКĐģ: newLink.htm -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="<?php echo $ENCODING; ?>" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>ĐиŅĐĩĐŧ (ĐēОд), ŅĐžĐēŅĐ°ŅĐ°ĐĩĐŧ (ŅŅŅĐģĐēи)!</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css" integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I" crossorigin="anonymous">
</head>
<body class="text-center bg-dark text-light">
<nav class="m-2">
<ul class="nav nav-pills justify-content-center">
<li class="nav-item">
<a class="nav-link" aria-current="page" href="/bn/">ĐĐģавĐŊĐ°Ņ</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">ĐĄŅĐ°ŅŅŅ ĐŊĐ° ĐĨĐ°ĐąŅĐĩ</a>
</li>
<li class="nav-item">
<a class="nav-link" href="https://nikonovs.ru">ХОСдаŅĐĩĐģŅ</a>
</li>
</ul>
</nav>
<div class="container">
<h1>ĐĐžŅĐžŅĐēиĐĩ ŅŅŅĐģĐēи ŅĐļĐĩ СдĐĩŅŅ.</h1>
<!-- ĐŖйиŅĐ°ĐĩĐŧ иС ŅĐžŅĐŧŅ ŅŅĐŊĐēŅиОĐŊĐ°Đģ ŅĐžŅĐŧŅ и вŅвОдиĐŧ ĐŋĐĩŅĐĩĐŧĐĩĐŊĐŊŅĐĩ -->
<form class="mt-5 mb-3">
<div class="row justify-content-center">
<div class="col-auto">
<label for="inputLink" class="col-form-label">ĐĄĐžĐēŅĐ°ŅиĐģи:</label>
</div>
<div class="col-auto">
<input disabled required type="url" name="link" id="inputLink" class="form-control disabled" aria-describedby="inputLink" value="<?= $link ?>">
</div>
</div>
<p class="m-2 text-secondary">ĐĐž ŅŅОК ŅŅŅĐģĐēĐĩ ĐŋĐĩŅĐĩŅĐģи: `<?= $hits ?>`</p>
</form>
<a href="/bn/" class="mt-3 mb-5 btn btn-primary btn-lg">ĐĐĐ ĐĐŖĐĸĐŦĐĄĐ¯ ĐĐ ĐĐĐĐĐĐŖĐŽ</a>
<footer class="m-2">ĐĄĐ´ĐĩĐģĐ°ĐŊĐž Ņ <img width="20" height="20" src="https://image.flaticon.com/icons/svg/833/833472.svg" alt="ĐģŅйОвŅŅ">, <a href="https://v5.getbootstrap.com/">ĐŋŅŅŅĐŧ Bootstrap'ĐžĐŧ</a> и <a href="https://fatfreeframework.com/">ĐąĐĩС ĐļиŅĐ°</a></footer>
</div>
</body>
</html>
āĻāĻŽāĻ°āĻž āĻ°ā§āĻ āĻ¨āĻŋāĻā§āĻ āĻ˛āĻŋāĻāĻŋāĨ¤
$f3->route('GET|POST /newLink', //ĐŧŅ ĐąŅĐ´ĐĩĐŧ ОйŅайаŅŅваŅŅ и POST и GET
function($f3) {
$db = new DBSQL( //ĐОдĐēĐģŅŅĐĩĐŊиĐĩ Đē ĐĐ ĐŊОвОĐĩ в ĐēĐ°ĐļĐ´ĐžĐŧ Đ ĐžŅŅĐĩ
'mysql:host=localhost;port=3306;dbname=linker',
'root',
''
);
//ĐŋŅĐĩĐēŅĐ°ŅĐŊĐ°Ņ ŅŅĐŊĐēŅиŅ ĐŗĐĩĐŊĐĩŅĐ°Ņии ŅĐ°Đ´ĐžĐŧĐŊŅŅ
ŅиĐŧвОĐģОв:
$permitted_chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
function generate_string($input, $strength = 4) {
$input_length = strlen($input);
$random_string = '';
for($i = 0; $i < $strength; $i++) {
$random_character = $input[mt_rand(0, $input_length - 1)];
$random_string .= $random_character;
}
return $random_string;
}
//ĐŋŅОвĐĩŅĐēĐ° ĐŊĐ° ĐŋОвŅĐžŅĐĩĐŊиĐĩ link - ĐŊĐ°Đŧ ĐļĐĩ ĐŊĐĩ ĐŊŅĐļĐŊĐž ŅŅОйŅ ĐēĐ°ĐļĐ´ŅĐš ŅаС ĐŗĐĩĐŊĐĩŅиŅОваĐģиŅŅ ĐŊОвŅĐĩ ŅŅŅĐģĐēи. link - ŅĐŊиĐēĐ°ĐģŅĐŊŅĐš.
$check = new DBSQLMapper($db,'links');
$check->load(array('link="'. $link .'"'));
if ($check->dry()) {
$g_code = generate_string($permitted_chars);
$row = new DBSQLMapper($db,'links');
$row->reset();
$row->code = $g_code;
$row->link = $link;
$row->save();
} else {
$g_code = $check->code; //ĐĩŅĐģи link ĐŋОвŅĐžŅŅĐĩŅŅŅ, ŅĐž ĐŋĐžĐēаСŅваĐĩĐŧ ŅŅĐ°ŅŅĐš ĐēОд
}
$short_link = 'https://'. $_SERVER['HTTP_HOST'] . '/' . $g_code; //ŅОйиŅĐ°ĐĩĐŧ ĐēĐžĐŊĐĩŅĐŊŅŅ ŅŅŅĐģĐēŅ
//ĐŋĐ°ŅĐ°ĐŧĐĩŅŅŅ иС $_POST ĐŧĐžĐļĐŊĐž ĐŋĐžĐģŅŅиŅŅ Ņ ĐŋĐžĐŧĐžŅŅŅ $f3->get('POST'), ĐŋОддĐĩŅĐļиваĐĩŅŅŅ ŅĐžŅĐĩŅĐŊĐ°Ņ ĐŊĐžŅĐ°ŅиŅ (ĐŋĐžĐŋŅавŅŅĐĩ, ĐĩŅĐģи ĐŊĐĩĐŋŅавиĐģŅĐŊĐž ĐŊаСŅваŅ): ĐŋĐ°ŅĐ°ĐŧĐĩŅŅ "link" ĐŧĐžĐļĐŊĐž ĐŋĐžĐģŅŅиŅŅ ŅĐ°Đē:
$link = $f3->get('POST.link');
if ( !empty($f3->get('POST')) ) { //ĐŅĐ´Đ°ĐĩĐŧ HTML, ŅĐžĐģŅĐēĐž ĐĩŅĐģи POST ĐŊĐĩ ĐŋŅŅŅОК.
$f3->set('link', $short_link);
$f3->set('hits', $check->hits);
$view = new View;
echo $view->render('newLink.htm');
} else { //иĐŊĐ°ŅĐĩ - ŅĐĩдиŅĐĩĐēŅ ĐŊĐ° ĐŗĐģавĐŊŅŅ
$f3->$f3->reroute('/');
}
}
);
āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤! āĻāĻ¸āĻ˛ā§, āĻāĻāĻž āĻ¸āĻšāĻ āĻāĻŋāĻ˛.
āĻĒā§āĻ¨āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ
āĻāĻ° āĻāĻŋāĻā§ āĻāĻ°āĻžāĻ° āĻŦāĻžāĻāĻŋ āĻāĻā§:
- URL āĻĨā§āĻā§ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻĒāĻžāĻ¨
- āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§ āĻāĻ° āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻ¨
- āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻĨā§āĻā§ āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ āĻ˛āĻŋāĻā§āĻ āĻĒāĻžāĻ¨
- āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻā§ āĻĒā§āĻ¨āĻāĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°ā§āĻ¨
- āĻ˛āĻžāĻ!
āĻāĻŽāĻ°āĻž āĻļā§āĻˇ āĻ°ā§āĻā§āĻ° āĻĒāĻ°ā§ āĻā§āĻĄ āĻ˛āĻŋāĻāĻ¤ā§ āĻĨāĻžāĻāĻŋāĨ¤
$f3->route('GET /@code', //ŅĐēаСŅваĐĩĐŧ ĐŋĐ°ŅĐ°ĐŧĐĩŅŅ ĐŋĐžŅĐģĐĩ "@", ĐžĐŊ ĐŋĐžĐŋĐ°Đ´ĐĩŅ в PARAMS
function($f3) {
//ŅĐŊОва ĐžĐŋŅĐĩĐ´ĐĩĐģŅĐĩĐŧ $db
$db = new DBSQL(
'mysql:host=localhost;port=3306;dbname=linker',
'root',
''
);
$code = $f3->get('PARAMS.code'); //ĐŋĐžĐģŅŅĐ°ĐĩĐŧ ĐŋĐ°ŅĐ°ĐŧĐĩŅŅ
$link = new DBSQLMapper($db,'links');
//ĐĩŅĐģи ĐŋĐžĐģŅŅĐ°ĐĩŅŅŅ ĐŋĐžĐģŅŅиŅŅ ŅŅŅĐģĐēŅ иС ĐĐ - ĐŋĐžĐģŅŅĐ°ĐĩĐŧ, ŅвĐĩĐģиŅиваĐĩĐŧ ĐēĐžĐģиŅĐĩŅŅвО ĐŋĐĩŅĐĩŅ
ОдОв и ĐŋĐĩŅĐĩĐŊĐ°ĐŋŅавĐģŅĐĩĐŧ
if ($link->load(array('code="'.$code.'"', 'link=?'))) {
$link->hits++;
$link->save();
$f3->reroute($link->link);
} else {
$f3->reroute('/'); //Đ° ĐĩŅĐģи ŅĐ°ĐēОК ŅŅŅĐģĐēи ĐŊĐĩŅ - ĐŧиĐģĐžŅŅи ĐŋŅĐžŅиĐŧ ĐŊĐ° ĐŗĐģавĐŊŅŅ
}
}
);
āĻāĻĒāĻ¨āĻŋ āĻšāĻ¯āĻŧāĻ¤ā§ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°ā§āĻā§āĻ¨ āĻ¯ā§ āĻĒāĻĨā§ āĻāĻŦāĻ āĻĒāĻĨā§ āĻ¨āĻ¤ā§āĻ¨ āĻ˛āĻŋāĻā§āĻ, āĻāĻŦāĻ āĻāĻĒāĻ°ā§āĻ° āĻ°ā§āĻā§ āĻāĻāĻ āĻāĻŋāĻ¨āĻŋāĻ¸ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻŦā§ - āĻ¸āĻ°ā§āĻŦā§āĻĒāĻ°āĻŋ
$f3âāĻ°āĻžāĻ¨()!
āĻĒāĻĄāĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ!
āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻ˛āĻŋāĻā§āĻ¨ āĻāĻŦāĻ āĻāĻŋāĻā§ āĻā§āĻ˛ āĻšāĻ˛ā§ āĻāĻŽāĻžāĻā§ āĻ¸āĻāĻļā§āĻ§āĻ¨ āĻāĻ°āĻ˛ā§ āĻāĻŽāĻŋ āĻā§āĻļāĻŋ āĻšāĻŦā§.
āĻāĻŦāĻ āĻšā§āĻŽāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻŦāĻž āĻ˛ā§āĻāĻā§āĻ° (āĻāĻŽāĻžāĻ°) āĻ āĻ˛āĻ¸āĻ¤āĻžāĻ° āĻĒā§āĻ°āĻŽāĻžāĻŖ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻŽāĻŋ āĻā§ āĻā§ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¤āĻžāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻ°ā§āĻā§āĻāĻŋāĨ¤ āĻāĻāĻž āĻāĻ°ā§ āĻļā§āĻāĻž āĻāĻžāĻ˛ā§!
- āĻāĻāĻŋ āĻ āĻŦāĻļā§āĻ¯āĻ āĻ āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻā§āĻĒāĻ¨ā§āĻ¨ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ $g_code āĻāĻŦāĻžāĻ° āĻāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¤āĻžāĻ āĻāĻŽāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻ˛āĻŋāĻāĻ¤ā§ āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ āĻ¯āĻž āĻāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻŦā§āĨ¤
- āĻāĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻĒāĻ¨āĻŋ āĻ¸ā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ āĻĒāĻ°āĻŋāĻ¸āĻāĻā§āĻ¯āĻžāĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻ¸ā§āĻ¯ā§āĻāĻ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ā§ˇ /@āĻā§āĻĄ/āĻĒāĻ°āĻŋāĻ¸āĻāĻā§āĻ¯āĻžāĻ¨
- āĻ˛āĻŋāĻā§āĻ āĻ¸āĻāĻā§āĻˇāĻŋāĻĒā§āĻ¤āĻāĻ°āĻŖ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻ° āĻ˛āĻŋāĻā§āĻāĻā§āĻ˛āĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻ¨āĻŋāĻˇāĻŋāĻĻā§āĻ§ āĻāĻ°ā§āĻ¨, āĻ¸āĻāĻā§āĻˇāĻŋāĻĒā§āĻ¤āĻāĻ°āĻŖ āĻĨā§āĻā§ "āĻ¸ā§āĻ°āĻā§āĻˇāĻŋāĻ¤" āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
-
āĻāĻŽāĻŋ āĻĻā§āĻĸāĻŧāĻāĻžāĻŦā§ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻāĻ°āĻāĻŋ āĻ¯ā§ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻā§āĻ āĻŦāĻŋāĻˇāĻ¯āĻŧā§āĻ, āĻāĻĒāĻ¨āĻŋ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻĻāĻŋāĻā§ āĻāĻ¨āĻĒā§āĻ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖ āĻāĻ°ā§āĻ¨, āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ āĻ¤ā§āĻ°ā§āĻāĻŋāĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻ˛ā§, āĻāĻĒāĻ¨āĻžāĻ° āĻāĻ¨āĻĒā§āĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ āĻāĻŦāĻ āĻāĻžāĻāĻĒ = "url" āĻ¯ā§āĻ āĻāĻ°āĻžāĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°āĻž āĻāĻāĻŋāĻ¤ āĻ¨āĻ¯āĻŧāĨ¤
āĻ°ā§āĻĄāĻāĻŽāĻ°ā§āĻĄ -
āĻāĻŽā§āĻ¨ā§āĻā§ āĻ¸āĻžāĻā§āĻ¸ā§āĻ āĻāĻ°ā§āĻ¨...
āĻ¸āĻāĻ¸ā§āĻĒāĻ°ā§āĻļā§)
āĻāĻ¤ā§āĻ¸: www.habr.com