āĻšāĻ°ā§āĻŦāĻŋ āĻ›āĻžāĻĄāĻŧāĻž āĻ˛āĻŋāĻ™ā§āĻ• āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤ āĻ•āĻ°āĻž (F3)

āĻšāĻ°ā§āĻŦāĻŋ āĻ›āĻžāĻĄāĻŧāĻž āĻ˛āĻŋāĻ™ā§āĻ• āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤ āĻ•āĻ°āĻž (F3)

13 āĻŦāĻ›āĻ° āĻŦāĻ¯āĻŧāĻ¸ā§‡ āĻ˛āĻŋāĻ™ā§āĻ• āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻ•ā§‹āĻ¨ āĻ˛āĻœā§āĻœāĻž āĻ¨ā§‡āĻ‡, āĻ¤āĻžāĻ‡ āĻ¨āĻž? āĻāĻ•āĻœāĻ¨ āĻļāĻŋāĻ•ā§āĻˇāĻžāĻ¨āĻŦāĻŋāĻļ, āĻāĻŦāĻ‚ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻœāĻ¨ āĻļāĻŋāĻ•ā§āĻˇāĻžāĻ¨āĻŦāĻŋāĻļ āĻ¨āĻ¯āĻŧ, āĻ•āĻŋāĻ›ā§ āĻ¨āĻ¤ā§āĻ¨ āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻļā§‡āĻ–āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¨āĻŋāĻœā§‡āĻ° āĻ˛āĻŋāĻ™ā§āĻ• āĻŸā§‡āĻŽāĻžāĻ° āĻ˛ā§‡āĻ–āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤āĨ¤ āĻ¯āĻž āĻ†āĻŽāĻŋ āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤ āĻ†āĻŽāĻŋ āĻ•āĻŋ āĻŦāĻ˛āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ - āĻĒāĻžā§āĻšāĻŽ āĻŦā§āĻŸāĻ¸ā§āĻŸā§āĻ°ā§āĻ¯āĻžāĻĒ, āĻāĻ•āĻŸāĻŋ āĻ•āĻŽ āĻšāĻ°ā§āĻŦāĻŋ āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻāĻŦāĻ‚ āĻ†āĻ¤ā§āĻŽāĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ•āĻ°āĻžāĨ¤

āĻāĻ–āĻžāĻ¨ā§‡ āĻĄā§‡āĻŽā§‹, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ•ā§‹āĻĄ. āĻ†āĻŽāĻžāĻ° āĻŽāĻ¤ āĻĒāĻžāĻ āĻ•āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ 😉

āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•, āĻĄāĻžāĻ¨?

āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻ˛āĻžāĻ°āĻžāĻ­ā§‡āĻ˛ āĻāĻŦāĻ‚ āĻāĻ° āĻŽāĻ¤ā§‹ āĻ¨āĻ¯āĻŧ - āĻ†āĻœ āĻ†āĻŽāĻ°āĻž 65 āĻ•āĻŋāĻ˛ā§‹āĻŦāĻžāĻ‡āĻŸ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻŦ āĻĢā§āĻ¯āĻžāĻŸāĻĢā§āĻ°ā§€ āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•. āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻĒāĻžāĻ‡āĻĨāĻ¨ āĻĢā§āĻ˛āĻžāĻ¸ā§āĻ•ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻšāĻ¨ āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ…āĻ¨ā§āĻ­āĻŦ āĻ•āĻ°āĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻāĻŸāĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻ•ā§‹āĻĨāĻžāĻ“ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡:

#Ņ€ĐžŅƒŅ‚иĐŊĐŗ вО ФĐģĐ°ŅĐēĐĩ
@app.route('/')
def hello_world():
    return 'Hello, World!'
//Ņ€ĐžŅƒŅ‚иĐŊĐŗ в ОбĐĩСĐļиŅ€ĐĩĐŊĐŊĐžĐŧ
$f3->route('GET /',
    function() {
        echo 'Hello, world!';
    }
);

āĻ āĻŋāĻ• āĻ†āĻ›ā§‡, āĻ­ā§āĻ˛ā§‡ āĻ¯āĻžāĻ“āĨ¤ āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°ā§āĻ¨ āĻ…āĻĢāĻ¸āĻžāĻ‡āĻŸ āĻĨā§‡āĻ•ā§‡ āĻœāĻŋāĻĒ āĻ•āĻ°ā§āĻ¨, āĻāĻŸāĻŋāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°ā§‡ āĻ†āĻ¨āĻĒā§āĻ¯āĻžāĻ• āĻ•āĻ°ā§āĻ¨, āĻ¯āĻž āĻāĻ•āĻ‡ āĻŽā§āĻšā§‚āĻ°ā§āĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻŋāĻ¯āĻŧ āĻ•ā§‹āĻĄ āĻāĻĄāĻŋāĻŸāĻ°ā§‡ āĻ–ā§‹āĻ˛ā§‡āĨ¤ āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° index.php āĻāĻŦāĻ‚ āĻĨā§‡āĻ•ā§‡ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ¸āĻ°āĻžāĻ¨ /uiāĨ¤

āĻāĻ–āĻžāĻ¨ā§‡ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ…āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻ¸āĻšāĻœ - āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°ā§‡ 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();

āĻļā§āĻ°ā§ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻāĻ¤āĻŸā§āĻ•ā§āĻ‡ āĻœāĻžāĻ¨āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻāĻ° āĻ•ā§‹āĻĄāĻŋāĻ‚ āĻļā§āĻ°ā§ āĻ•āĻ°āĻž āĻ¯āĻžāĻ•!

[āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ XAMPP āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹āĻœ āĻāĻŦāĻ‚ āĻ­āĻŋāĻāĻ¸ āĻ•ā§‹āĻĄā§‡, āĻ¨āĻ“āĻļā§‡āĻ¨ā§‡ āĻ˛ā§‡āĻ–āĻž āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§]

āĻšā§‹āĻŽ āĻĒā§‡āĻœ

āĻŽā§‚āĻ˛ āĻĒāĻžāĻ¤āĻž āĻĻāĻŋāĻ¯āĻŧā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°āĻž āĻ¯āĻžāĻ•āĨ¤ āĻ¯ā§ŒāĻ•ā§āĻ¤āĻŋāĻ•, āĻĄāĻžāĻ¨?

//ФаКĐģ: index.php

$f3->route('GET /',
    function($f3) { //Ņ‡Ņ‚ОйŅ‹ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ Ņ„ŅƒĐŊĐēŅ†Đ¸Đ¸ F3 ĐŋĐĩŅ€ĐĩĐ´Đ°ĐĩĐŧ ĐĩĐŗĐž в Ņ€ĐžŅƒŅ‚
                $view = new View; // ŅĐžĐˇĐ´Đ°ĐĩĐŧ вŅŒŅŽŅˆĐēŅƒ
        echo $view->render('home.htm'); //Ņ€ĐĩĐŊĐ´ĐĩŅ€Đ¸Đŧ ŅˆĐ°ĐąĐģĐžĐŊ
    }
);

āĻāĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ‡ āĻ–ā§āĻŦ āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻšāĻŦā§‡. āĻ¸āĻ°āĻ˛āĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ āĻŦā§āĻŸāĻ¸ā§āĻŸā§āĻ°ā§āĻ¯āĻžāĻĒ v5 alpfa.

āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻ­ā§āĻ˛āĻŦā§‡āĻ¨ āĻ¨āĻž āĻ‡āĻ‰āĻ†āĻ‡, āĻ…āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ āĻ¤āĻžāĻ°āĻž āĻ¨āĻž āĻ•āĻžāĻ āĻžāĻŽā§‹āĻ° āĻ•āĻžāĻ›ā§‡ āĻĻā§ƒāĻļā§āĻ¯āĻŽāĻžāĻ¨

<!-- ФаКĐģ: 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āĻŸāĻŋ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ° āĻĨāĻžāĻ•āĻŦā§‡:

  1. āĻ•ā§‹āĻĄ āĻšāĻ˛ āĻĄā§‹āĻŽā§‡āĻ¨ā§‡āĻ° āĻĒāĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻāĻ˛ā§‹āĻŽā§‡āĻ˛ā§‹ 4 āĻ…āĻ•ā§āĻˇāĻ° āĻ¯āĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻĒā§āĻ¨āĻƒāĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°āĻž āĻšāĻŦā§‡, āĻ¯ā§‡āĻŽāĻ¨ example.com/ABC1
  2. āĻ˛āĻŋāĻ™ā§āĻ• - āĻ›ā§‹āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĻ¨āĻŋ āĻ˛āĻŋāĻ™ā§āĻ•āĨ¤
  3. āĻšāĻŋāĻŸ - āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤ āĻ˛āĻŋāĻ™ā§āĻ•ā§‡ āĻ•ā§āĻ˛āĻŋāĻ•ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĨ¤

āĻ†āĻŽāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻšāĻ°ā§āĻŦāĻŋ āĻ›āĻžāĻĄāĻŧāĻž āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻ¨ā§€āĻ¤āĻŋāĻŸāĻŋ āĻ¸āĻ‚āĻ•ā§āĻˇā§‡āĻĒā§‡ āĻŦāĻ˛āĻŦāĨ¤

<?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('/');
            }

        }
);

āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤! āĻ†āĻ¸āĻ˛ā§‡, āĻāĻŸāĻž āĻ¸āĻšāĻœ āĻ›āĻŋāĻ˛.

āĻĒā§āĻ¨āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ

āĻ†āĻ° āĻ•āĻŋāĻ›ā§ āĻ•āĻ°āĻžāĻ° āĻŦāĻžāĻ•āĻŋ āĻ†āĻ›ā§‡:

  1. URL āĻĨā§‡āĻ•ā§‡ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻĒāĻžāĻ¨
  2. āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡ āĻāĻ° āĻ‰āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§āĻ¨
  3. āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻĨā§‡āĻ•ā§‡ āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻ˛āĻŋāĻ™ā§āĻ• āĻĒāĻžāĻ¨
  4. āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ•ā§‡ āĻĒā§āĻ¨āĻƒāĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°ā§āĻ¨
  5. āĻ˛āĻžāĻ­!

āĻ†āĻŽāĻ°āĻž āĻļā§‡āĻˇ āĻ°ā§āĻŸā§‡āĻ° āĻĒāĻ°ā§‡ āĻ•ā§‹āĻĄ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻĨāĻžāĻ•āĻŋāĨ¤

$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('/'); //Đ° ĐĩŅĐģи Ņ‚Đ°ĐēОК ŅŅŅ‹ĐģĐēи ĐŊĐĩŅ‚ - ĐŧиĐģĐžŅŅ‚и ĐŋŅ€ĐžŅĐ¸Đŧ ĐŊĐ° ĐŗĐģавĐŊŅƒŅŽ
        }
    }
);

āĻ†āĻĒāĻ¨āĻŋ āĻšāĻ¯āĻŧāĻ¤ā§‹ āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ āĻ¯ā§‡ āĻĒāĻĨā§‡ āĻāĻŦāĻ‚ āĻĒāĻĨā§‡ āĻ¨āĻ¤ā§āĻ¨ āĻ˛āĻŋāĻ™ā§āĻ•, āĻāĻŦāĻ‚ āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ°ā§āĻŸā§‡ āĻāĻ•āĻ‡ āĻœāĻŋāĻ¨āĻŋāĻ¸ āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻŦā§‡ - āĻ¸āĻ°ā§āĻŦā§‹āĻĒāĻ°āĻŋ āĻ•ā§‹āĻĄ "newLink" āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻŋāĻ˛ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ (āĻāĻŸāĻŋ āĻĒāĻžāĻ°ā§‡ āĻ¨āĻž, āĻœā§‡āĻ¨āĻžāĻ°ā§‡āĻŸāĻ°ā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻŦāĻĄāĻŧ āĻšāĻžāĻ¤ā§‡āĻ° āĻ…āĻ•ā§āĻˇāĻ° āĻĨāĻžāĻ•ā§‡), āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻāĻŸāĻŋ āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤

$f3→āĻ°āĻžāĻ¨()!

āĻĒāĻĄāĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ!
āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻ˛āĻŋāĻ–ā§āĻ¨ āĻāĻŦāĻ‚ āĻ•āĻŋāĻ›ā§ āĻ­ā§āĻ˛ āĻšāĻ˛ā§‡ āĻ†āĻŽāĻžāĻ•ā§‡ āĻ¸āĻ‚āĻļā§‹āĻ§āĻ¨ āĻ•āĻ°āĻ˛ā§‡ āĻ†āĻŽāĻŋ āĻ–ā§āĻļāĻŋ āĻšāĻŦā§‡.

āĻāĻŦāĻ‚ āĻšā§‹āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻŦāĻž āĻ˛ā§‡āĻ–āĻ•ā§‡āĻ° (āĻ†āĻŽāĻžāĻ°) āĻ…āĻ˛āĻ¸āĻ¤āĻžāĻ° āĻĒā§āĻ°āĻŽāĻžāĻŖ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ†āĻŽāĻŋ āĻ•ā§€ āĻ•ā§€ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¤āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻ°ā§‡āĻ–ā§‡āĻ›āĻŋāĨ¤ āĻāĻŸāĻž āĻ•āĻ°ā§‡ āĻļā§‡āĻ–āĻž āĻ­āĻžāĻ˛ā§‹!

  • āĻāĻŸāĻŋ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻ…āĻ¸āĻŽā§āĻ­āĻžāĻŦā§āĻ¯, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ‰ā§ŽāĻĒāĻ¨ā§āĻ¨ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ $g_code āĻ†āĻŦāĻžāĻ° āĻ˜āĻŸāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ‡ āĻ¯āĻž āĻāĻŸāĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦā§‡āĨ¤
  • āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āĻ†āĻĒāĻ¨āĻŋ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ• āĻĒāĻ°āĻŋāĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻāĻŦāĻ‚ āĻ¸ā§āĻ¯ā§āĻ‡āĻš āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ā§ˇ /@āĻ•ā§‹āĻĄ/āĻĒāĻ°āĻŋāĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻ¨
  • āĻ˛āĻŋāĻ™ā§āĻ• āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤āĻ•āĻ°āĻŖ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ° āĻ˛āĻŋāĻ™ā§āĻ•āĻ—ā§āĻ˛āĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻ¨āĻŋāĻˇāĻŋāĻĻā§āĻ§ āĻ•āĻ°ā§āĻ¨, āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤āĻ•āĻ°āĻŖ āĻĨā§‡āĻ•ā§‡ "āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻŋāĻ¤" āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨
  • āĻ†āĻŽāĻŋ āĻĻā§ƒāĻĸāĻŧāĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ•āĻ°āĻ›āĻŋ āĻ¯ā§‡ āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ›ā§‹āĻŸ āĻŦāĻŋāĻˇāĻ¯āĻŧā§‡āĻ“, āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻĻāĻŋāĻ•ā§‡ āĻ‡āĻ¨āĻĒā§āĻŸ āĻ¯āĻžāĻšāĻžāĻ‡āĻ•āĻ°āĻŖ āĻ•āĻ°ā§‡āĻ¨, āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻ˛ā§‡, āĻ†āĻĒāĻ¨āĻžāĻ° āĻ‡āĻ¨āĻĒā§āĻŸ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ āĻāĻŦāĻ‚ āĻŸāĻžāĻ‡āĻĒ = "url" āĻ¯ā§‹āĻ— āĻ•āĻ°āĻžāĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ āĻ¨āĻ¯āĻŧāĨ¤
    āĻ°ā§‡āĻĄāĻ•āĻŽāĻ°ā§‡āĻĄ

  • āĻ•āĻŽā§‡āĻ¨ā§āĻŸā§‡ āĻ¸āĻžāĻœā§‡āĻ¸ā§āĻŸ āĻ•āĻ°ā§āĻ¨...

    āĻ¸āĻ‚āĻ¸ā§āĻĒāĻ°ā§āĻļā§‡)

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨