13 ááŸá¬ ááá·áºááºááœá±ááᯠá¡ááá¯áá»á¯á¶á·áᬠááŸááºá áᬠááá¯ááºáá«áá°áž áá¯ááºáááºááá¬áž á á¡á ááŒá¯áá°áá¬áá á¡á ááŒá¯áá°áá¬ááá áá°áá±á¬ááºá¡áá áºá¡áá»áá¯á·ááᯠáá±á·áá¬áá±á ááºááœáẠáááºážáááá¯ááºááá¯áẠLink Tamer áá±ážááẠááŒáá¯ážá á¬ážááá·áºáááºá áááºá áá¬áá¬áá²á áá«áá¬ááŒá±á¬ááá¯ááºááá² - ááá¹á á bootstrapá á¡áá®áááºážáá±á¬áá±á¬ááºááŸáá·áº á áááºáááá¬ááºá¡ááá¯ááºážá
áá®ááŸá¬
áá°áá±á¬ááºá ááŸááºáá«ááá¬ážá
Laravel ááŸáá·áºá¡ááŒá¬ážá¡áá¬áá»á¬ážááá¯ááºáá« - ááá±á·áá»áœááºá¯ááºááá¯á· 65 áá®ááá¯ááá¯ááºááŒáá·áºááŒá¯áá¯ááºáá«áááºá
#ÑПÑÑОМг вП ЀлаÑке
@app.route('/')
def hello_world():
return 'Hello, World!'
//ÑПÑÑОМг в ÐбезжОÑеММПЌ
$f3->route('GET /',
function() {
echo 'Hello, world!';
}
);
áá±á¬ááºážááŒá®á áá±á·ááá¯ááºáá«á áá±á«ááºážáá¯ááºáá¯ááºáá«á
á€áá±áá¬ááœáẠá¡áá¬á¡á¬ážáá¯á¶ážááẠá¡ááœááºááá¯ážááŸááºážáá«ááẠ- ááá¯ááºááœá²áá²ááœáẠui áá»áœááºá¯ááºááá¯á·ááœáẠViews áá»á¬ážá¡á¬ážáá¯á¶ážááŸáááẠááá¯á·ááá¯áẠááá¯ážááŸááºážá áœá¬ááŒá±á¬ááá»áŸáẠáááºážááá¯á·ááẠáááºááŸááºáá¬ážáá±á¬ URL áá áºáá¯ááá¯á·ááœá¬ážáá±á¬ááºááá·áºá¡áá« á¡áá¯á¶ážááŒá¯áá°ááá¯ááŒáááá·áº á¡ááá·áºááŒáŸáá·áºáá¬ážáá±á¬ HTML áá¯á¶á á¶áá»á¬ážááŒá áºáááºá
á€áááºááŸá¬ áá»áœááºá¯ááºááá¯á·á "áá»áŸá±á¬ááºááœáŸá¬" á á¡ááá¯ážá á¯ááŒá áºááẠá
<?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á ááá¯ááºááẠáá°ááá¯á· áááœá¬ážáá°áž áá°áá±á¬ááºááᯠááŒááºááá¯ááºáááºá
<!-- Ѐайл: 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="/my/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 ááᯠrun áá«á
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`);
ááá·áºáá áºáá¯á á®á¡ááœáẠá¡ááœáẠá ááœáẠááŸááááº-
- áá¯ááºááẠááá¯ááááºážááŒá®ážáá±á¬áẠáá»áááºážá¡áá¹ááᬠ4 áá¯á¶áž áá²á·ááá¯á· ááŒááºáááºááœáŸááºážáá±ážááẠááŒá áºáááºá example.com/ABC1
- ááá·áºááºâ á¡ááá¯áá»á¯á¶ážááá¬ážáá«á ááá·áºááº
- Hits - á¡ááá¯áá»á¯á¶ážáá¬ážáá±á¬ ááá·áºááºáá±á«áºááœáẠááá áºááŸáááºááŸá¯ á¡áá±á¡ááœááºá
á¡áá®ááá«áá²á· áá±áá¬áá±á·á áºáá áºáá¯áá²á· á¡áá¯ááºáá¯ááºááá²á· áááá¬áááᯠá¡ááá¯áá»á¯á¶ážááŒá±á¬ááŒáá«áááºá
<?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 ÐаÑÑПÑÑелÑМП ÑекПЌеМЎÑÑ Ð¿ÑПÑОÑаÑÑ, Ñ
ПÑÑÐ±Ñ Ñ Ð¿ÐŸÐŒÐŸÑÑÑ Ð¿ÐµÑевПЎÑОка, вÑÑÑПеММПгП в бÑаÑзеÑ.
?>
á¡ááá¯áá»á¯á¶á·á ááŒá¯ááŒáá«á áá¯á·á
ááá·áºááºá¡áá áºááᯠáá¯ááºáá±á¬ááºáá±áááºá
View á¡áá áºáá áºáᯠáááºáá®ážáá«á á¡ááœáŸááºážáááºáá á¬áá»ááºááŸá¬ááŸá áá±á¬ááºá០áá±á¬ááºážááá¯áá»ááºááᯠáá¯ááºáá±á¬ááºááá·áºá
ááááŠážá
áœá¬á ááááá¯á¶áž (home.htm) ááá°áá¬áá¯á¶á
á¶ááŸáá·áº á¡ááœááºáááºáá°áá±á¬áºáááºáž á¡áá
áºáá
áºáá¯ááᯠáááºáá®ážááŒáá«á
áá¯á·ánewLink.htm".
á¡á²áá®ááŸá¬ á¡ááá¯áá»á¯á¶ážááŒá®ážáá¬áž ááá·áºááºáá²á· á¡á²áá®á¡áá±á«áºááŸá¬ ááá
áºááŸáááºáá²á· á¡áá±á¡ááœááºááᯠááŒááá±ážááŸá¬ááŒá
áºáá«ááẠ(ဠ"ááááºážááááºážáá»á¬áž" ááᯠáááºáá¶ááŒáá·áºááŸá¯áááºá áá°áá®áá±á¬ááá·áºááºááᯠáááºáá¶á¡ááá¯áá»á¯á¶á·ááẠááá¯á¡ááºááẠ- ááááºá
á¬ááẠáá°áá®áá±áá«áááº)á
á¡ááœááºááŸá¯ááºážááᯠáá¯ááºáá¯ááºáááºá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠâvariable passingâ ááŸáá·áºááœááºááᯠá¡áá¯á¶ážááŒá¯áá«áááº-
<?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="/my/">ÐлавМаÑ</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="/my/" 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ârun()á
áááºááŸá¯ááŸá¯á¡ááœáẠáá»á±ážáá°ážáááºáá«áááºá
á¡ááŸá¬ážáá«ááẠááŸááºáá»ááºáá±ážááŒá®áž ááŒááºáá±ážáááºááá¯ááẠáááºážáá¬áá«áááºá
á á¬áá±ážááᬠ(áá»áá±á¬á·áº) á áá»ááºážááááŒááºážá áááºáá±á¡ááŒá Ạá¡áááºá ᬠááá¯á·ááá¯áẠáááºáá±á¡ááŒá Ạáá»áœááºá¯ááºáá¯ááºáá±á¬ááºááá¯ááºáááºáá»á¬ážááᯠá á¬áááºážááŒá¯á á¯áá¬ážáá²á·áááºá áá¯ááºááŒááºážá¡á¬ážááŒáá·áº áááºáá°áá¬á ááá¯áá±á¬ááºážáá«áááºá
- áá«á áá¯á¶ážááááŒá áºááá¯ááºáá±ááá·áº áá¯ááºáá±ážáá²á·á¡áá« $g_code áá±á¬ááºáá áºááŒááẠáááºááŒá áºááá¯ááºáá¬ááá¯á· áá®á¡ááœáẠá á áºáá±ážááá·áº áá¯ááºáá±á¬ááºáá»ááºáá áºáá¯ááᯠáá±ážááá¯á· á¡ááŒá¶ááŒá¯áá»ááºáá«áááºá
- áááºááẠáá¯á¶ááŸááºá á¬áááºážá¡ááºážáá»á¬ážááᯠááŒá¯áá¯ááºááá¯ááºááŒá®áž áááºážááᯠááŒá±á¬ááºážááŒá®ážáá±á¬áẠáááºážááá¯á·ááᯠááŒáááá¯ááºáááºá /@code/stats
- ááá·áºááºá¡ááá¯áá»á¯á¶á·ááŒááºážáááºáá±á¬ááºááŸá¯ááá¯ááºááá¯ááºááá¯á· ááá·áºááºáá»á¬ážáááºáá®ážááŒááºážááᯠáá¬ážááŒá áºáá«á á¡ááá¯áá»á¯á¶á·ááŒááºážá០"áá¬ááœááºáá¬ážáá±á¬" á¡áááºážá¡ááŒá áºáá»á¬ážá á¬áááºážááᯠáááºáá®ážáá«á
-
ááá¯ááá¯á·áá±á¬á¡áá±ážá¡ááœáŸá¬ážááá á¹á áá»á¬ážááœááºáááºá áááºááá¯ááºáᬠá¡ááŸá¬ážáá»á¬ážááᯠááŒáááŒááºážááŒáá·áº áá¬áá¬áááºááœáẠááá·áºááœááºážá¡áááºááŒá¯ááẠááá¯á¡ááºáá±á¬ á¡áááºá¡áá»ááºážááᯠáá±á«ááºážááá·áºááŒááºážááŸáá·áº ááá·áºááœááºážááŸá¯á¡ááœááºááœáẠ= âurlâ áᯠááá¯ááºááá·áºááŒááºážá¡áá±á«áº á¡á¬ážáááá¯ážááá·áºáá«á
RedComrade -
Comment ááŸá¬ á¡ááŒá¶ááŒá¯áá±ážáá«...
áááºááœááºááŸá¯)
source: www.habr.com