چڱو، وساريو. ڊائون لوڊ ڪريو .zip آف سائيٽ کان، ان کي کوليو هڪ فولڊر ۾، جيڪو ساڳئي وقت توهان جي پسنديده ڪوڊ ايڊيٽر ۾ کلي ٿو. پڌرو 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();
اهو سڀ ڪجهه توهان کي ڄاڻڻ جي ضرورت آهي شروع ڪرڻ لاء. اچو ته ڪوڊنگ شروع ڪريون!
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 ?>
$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('/'); //а если такой ссылки нет - милости просим на главную
}
}
);
توهان شايد اهو محسوس ڪيو آهي ته رستي ۾ ۽ اندر نئون لنڪ، ۽ رستي ۾ ساڳي شيء جي وضاحت ڪئي ويندي - سڀ کان پوء ڪوڊ "newLink" سان ملائي سگھي ٿو (اھو نٿو ڪري سگھي، جنريٽر صرف اکر اکر تي مشتمل آھي)، پر جيئن ته اھو پھريائين بيان ڪيو ويو آھي، اھو پھريون عمل ڪيو ويندو.
۽ جيئن ته هوم ورڪ يا ليکڪ جي سستيءَ جو ثبوت (مون)، مان هڪ فهرست ڇڏيان ٿو ته ڇا ٿي سگهي ٿو. اهو بهتر آهي ته ڪرڻ سان سکڻ!
اهو يقيناً ممڪن ناهي، پر جڏهن پيدا ٿئي $g_code ٿي سگهي ٿو ٻيهر، تنهن ڪري مان توهان کي صلاح ڏيان ٿو ته توهان هڪ فنڪشن لکو جيڪو هن جي جانچ ڪندي.
توھان پڻ ڪري سگھو ٿا عام انگ اکر ۽ انھن کي تبديل ڪرڻ کان پوء ڏيکاريو /@code/status
پاڻ کي لنڪ شارٽ ڪرڻ واري سروس جي لنڪ ٺاهڻ کي روڪيو، وسيلن جي هڪ فهرست ٺاهيو ”محفوظ“ مختصر ڪرڻ کان
مان سختي سان صلاح ڏيان ٿو ته اهڙي ننڍڙي معاملي ۾ به، توهان سرور جي پاسي تي ان پٽ جي تصديق ڪريو، ان سان لاڳاپيل غلطيون ڏيکاريل آهن، توهان کي گهربل خاصيت شامل ڪرڻ تي ڀروسو نه ڪرڻ گهرجي ۽ قسم = "url" ان پٽ فيلڊ ۾ ريڊ ڪامريڊ