Üdvözöllek, webfejlesztő társam! Készen állsz arra, hogy valami igazán hasznosat és szórakoztatót építsünk? Ma egy olyan eszközt fogunk létrehozni, ami nemcsak rendet tesz a hosszú, kusza linkek világában, de még a webfejlesztési tudásodat is elmélyíti. Igen, egy egyszerű URL-rövidítőt fogunk készíteni, a web legnépszerűbb szerveroldali szkriptnyelvével, a PHP-val, és egy megbízható adatbázis-kezelővel, a MySQL-lel.
Képzeld el, hogy a felhasználóidnak nem kell többé gigantikus linkeket másolgatniuk, vagy épp egy Twitter bejegyzésbe zsúfolni a fél kilométeres URL-t. Ehelyett egy rövid, elegáns linket kapnak, ami mögött a mi kis rendszerünk bújik meg. Izgalmasan hangzik, ugye? Vágjunk is bele!
Alapok: Miért van szükség URL-rövidítőre?
Mielőtt belevetnénk magunkat a kódolásba, beszéljünk egy kicsit arról, miért is olyan hasznos egy URL-rövidítő:
- Esztétika és olvashatóság: Egy hosszú, paraméterekkel teletűzdelt URL igencsak rondán mutat egy emailben, egy nyomtatott anyagon, vagy egy közösségi média posztban. Egy rövid, letisztult link sokkal esztétikusabb és könnyebben megjegyezhető.
- Karakterkorlátok: Gondoljunk csak a Twitterre, ahol minden karakter számít. Egy rövidített linkkel rengeteg helyet spórolhatunk meg.
- Követés és analitika: A saját URL-rövidítőnkkel pontosan nyomon követhetjük, hányszor kattintottak egy-egy linkre, honnan érkeztek a látogatók, vagy akár milyen eszközről. Ez értékes információ lehet marketingkampányokhoz vagy tartalomelemzéshez.
- Márkaépítés: Ha saját domain nevünkön fut az URL-rövidítőnk (pl.
sajatom.hu/abcde
), az erősíti a márkánk ismertségét és professzionalitását. - Rejtett paraméterek: Néha nem szeretnénk, ha a felhasználó látná az URL-ben szereplő összes paramétert. A rövidítés elrejti ezeket.
Láthatod, számos előnye van. Most, hogy megértettük az „miért”-et, jöjjön a „hogyan”!
Előkészületek: Amire szükségünk lesz
Ahhoz, hogy el tudjuk indítani a projektünket, a következőkre lesz szükségünk:
- Webszerver (Apache vagy Nginx): A PHP kód futtatásához elengedhetetlen. A legtöbb ingyenes tárhely és helyi fejlesztői környezet (pl. XAMPP, WAMP, MAMP) már tartalmazza.
- PHP: Minimum 7.4-es, de inkább a legújabb stabil verzió ajánlott.
- MySQL adatbázis: Az URL-ek tárolására.
- Alapszintű PHP és SQL ismeretek: Bár mindent részletesen elmagyarázok, jó, ha van némi fogalmad a szintaktikáról és az adatbázis-lekérdezésekről.
- Szövegszerkesztő vagy IDE: (pl. VS Code, Sublime Text, PhpStorm) a kód írásához.
- Webböngésző: A teszteléshez.
Ha mindez megvan, készen állunk!
A projekt felépítése és működési elve
Egy URL-rövidítő működési elve viszonylag egyszerű:
- A felhasználó megadja a hosszú URL-t.
- A rendszer generál egy rövid kódot (pl.
abcde
). - A hosszú URL-t és a rövid kódot eltárolja egy adatbázisban.
- Amikor valaki megnyitja a rövidített URL-t (pl.
sajatom.hu/abcde
), a rendszer lekérdezi az adatbázisból a hozzá tartozó hosszú URL-t, majd átirányítja a felhasználót arra az URL-re.
Projektünk fájlstruktúrája a következő lesz:
config.php
: Az adatbázis kapcsolódási adatai.index.php
: Ez lesz a fő fájl, ami kezeli az URL-ek rövidítését és az átirányításokat is..htaccess
: Az Apache webszerver számára szóló konfigurációs fájl, ami lehetővé teszi a „szép URL-ek” használatát (pl.sajatom.hu/abcde
asajatom.hu/index.php?code=abcde
helyett).
1. Lépés: Az adatbázis előkészítése
Először is hozzunk létre egy adatbázist és egy táblát az URL-eink tárolására. Jelentkezz be a phpMyAdmin-ba vagy a kedvenc MySQL kliensedbe, és futtasd le a következő SQL parancsokat:
CREATE DATABASE IF NOT EXISTS url_shortener CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE url_shortener;
CREATE TABLE IF NOT EXISTS urls (
id INT AUTO_INCREMENT PRIMARY KEY,
long_url TEXT NOT NULL,
short_code VARCHAR(10) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Nézzük meg, mit csináltunk:
CREATE DATABASE IF NOT EXISTS url_shortener ...;
: Létrehoztunk egyurl_shortener
nevű adatbázist, ha még nem létezne, és beállítottuk a karakterkódolását.USE url_shortener;
: Kiválasztottuk az újonnan létrehozott adatbázist.CREATE TABLE IF NOT EXISTS urls (...)
: Létrehoztunk egyurls
nevű táblát.id INT AUTO_INCREMENT PRIMARY KEY
: Egy automatikusan növekvő egyedi azonosító minden rekordhoz.long_url TEXT NOT NULL
: Ez tárolja a hosszú, eredeti URL-t.TEXT
típust használunk, mert az URL-ek lehetnek nagyon hosszúak.short_code VARCHAR(10) UNIQUE NOT NULL
: Ez tárolja a generált rövid kódot.VARCHAR(10)
-et használunk, ami elegendő egy 6-10 karakteres kódhoz. AUNIQUE
megkötés biztosítja, hogy minden rövid kód egyedi legyen.created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
: Ez automatikusan rögzíti az URL rövidítésének időpontját.
Ezzel az adatbázisunk készen áll az adatok fogadására.
2. Lépés: A konfigurációs fájl (config.php
)
Hozzuk létre a config.php
fájlt, ami tartalmazza az adatbázisunkhoz való kapcsolódáshoz szükséges adatokat. Ezeket a PHP PDO (PHP Data Objects) kiterjesztésén keresztül fogjuk használni, ami egy modern és biztonságos módja az adatbázisokkal való kommunikációnak.
<?php
/**
* Adatbázis kapcsolódási adatok és PDO inicializálás
*/
// Adatbázis paraméterek
define('DB_SERVER', 'localhost'); // Az adatbázis szerver címe (általában localhost)
define('DB_USERNAME', 'root'); // Az adatbázis felhasználóneve
define('DB_PASSWORD', ''); // Az adatbázis jelszava (XAMPP/WAMP esetén gyakran üres)
define('DB_NAME', 'url_shortener'); // Az adatbázis neve, amit létrehoztunk
// PDO objektum létrehozása és adatbázis kapcsolódás
try {
$pdo = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME . ";charset=utf8mb4", DB_USERNAME, DB_PASSWORD);
// Hibaüzenetek beállítása kivételként, hogy könnyebb legyen kezelni
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Adatok lekérése asszociatív tömbként alapértelmezetten
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (PDOException $e) {
// Ha hiba történik a kapcsolódás során, leállítjuk a szkriptet és kiírjuk a hibaüzenetet
die("Hiba az adatbázis kapcsolódás során: " . $e->getMessage());
}
?>
Fontos: A DB_USERNAME
és DB_PASSWORD
értékeket a saját adatbázis beállításaidnak megfelelően módosítsd! Helyi fejlesztés során a root
felhasználónév jelszó nélkül gyakori, de éles környezetben SOHA ne használj root
felhasználót, és mindig legyen erős jelszavad!
3. Lépés: A fő logikai fájl (index.php
)
Ez lesz a projekt szíve. Ez a fájl fogja tartalmazni az URL rövidítő formját, a rövidítés logikáját, és az átirányítás logikáját is. Éppen ezért eléggé hosszú lesz, de lépésről lépésre végigmegyünk rajta.
<?php
require_once 'config.php'; // Betöltjük az adatbázis kapcsolódást
$longUrl = ''; // Változó a hosszú URL tárolására (formban is használjuk)
$shortCode = ''; // Változó a generált rövid kód tárolására
$message = ''; // Változó a felhasználóknak szóló üzenetekhez
/**
* Rövid kód generálása és egyediségének ellenőrzése
* @param PDO $pdo A PDO adatbázis kapcsolat objektum
* @param int $length A generált rövid kód hossza
* @return string Az egyedi rövid kód
*/
function generateShortCode(PDO $pdo, $length = 6) {
// Engedélyezett karakterek a rövid kódban (alfanumerikus)
$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charsLength = strlen($chars);
$isUnique = false;
$randomString = '';
// Generálunk egy kódot, és ellenőrizzük, hogy egyedi-e az adatbázisban
// Ha nem egyedi, generálunk egy újat, amíg nem találunk egyedit
while (!$isUnique) {
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $chars[rand(0, $charsLength - 1)];
}
// Ellenőrizzük az egyediséget
$stmt = $pdo->prepare("SELECT COUNT(*) FROM urls WHERE short_code = :short_code");
$stmt->bindParam(':short_code', $randomString);
$stmt->execute();
if ($stmt->fetchColumn() == 0) { // Ha 0 találat van, akkor a kód egyedi
$isUnique = true;
}
}
return $randomString;
}
// ----- URL RÖVIDÍTÉSI LOGIKA (POST kérés esetén) -----
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['long_url'])) {
$longUrl = trim($_POST['long_url']);
// URL validálás
if (!filter_var($longUrl, FILTER_VALIDATE_URL)) {
$message = '<p class="error">Kérlek érvényes URL címet adj meg!</p>';
} else {
try {
// Először ellenőrizzük, hogy ez az URL már létezik-e rövidítve
$stmt = $pdo->prepare("SELECT short_code FROM urls WHERE long_url = :long_url LIMIT 1");
$stmt->bindParam(':long_url', $longUrl);
$stmt->execute();
$existingShortCode = $stmt->fetchColumn();
if ($existingShortCode) {
// Ha már létezik, azt adjuk vissza
$shortCode = $existingShortCode;
$message = '<p class="info">Ez az URL már rövidítve lett: <a href="/' . htmlspecialchars($shortCode) . '" target="_blank">' . htmlspecialchars($_SERVER['HTTP_HOST']) . '/' . htmlspecialchars($shortCode) . '</a></p>';
} else {
// Ha nem létezik, generálunk egy új rövid kódot
$shortCode = generateShortCode($pdo);
// Adatbázisba beillesztés
$stmt = $pdo->prepare("INSERT INTO urls (long_url, short_code) VALUES (:long_url, :short_code)");
$stmt->bindParam(':long_url', $longUrl);
$stmt->bindParam(':short_code', $shortCode);
if ($stmt->execute()) {
$message = '<p class="success">Az URL sikeresen rövidítve lett: <a href="/' . htmlspecialchars($shortCode) . '" target="_blank">' . htmlspecialchars($_SERVER['HTTP_HOST']) . '/' . htmlspecialchars($shortCode) . '</a></p>';
} else {
$message = '<p class="error">Hiba történt az URL rövidítése során. Kérlek próbáld újra!</p>';
}
}
} catch (PDOException $e) {
$message = '<p class="error">Adatbázis hiba: ' . htmlspecialchars($e->getMessage()) . '</p>';
}
}
}
// ----- URL ÁTIRÁNYÍTÁSI LOGIKA (GET kérés, ha rövid kóddal hívják meg) -----
else if (isset($_GET['code']) && !empty($_GET['code'])) {
$code = trim($_GET['code']);
try {
$stmt = $pdo->prepare("SELECT long_url FROM urls WHERE short_code = :short_code");
$stmt->bindParam(':short_code', $code);
$stmt->execute();
$result = $stmt->fetch(); // Alapértelmezett fetch mód: ASSOC
if ($result) {
// Átirányítás a hosszú URL-re
header("Location: " . $result['long_url']);
exit(); // Nagyon fontos az exit(), hogy a szkript leálljon az átirányítás után
} else {
// Ha a rövid kód nem található, 404-es hiba
header("HTTP/1.0 404 Not Found");
echo "<!DOCTYPE html><html lang='hu'><head><meta charset='UTF-8'><title>404 Nem található</title><style>body{font-family: Arial, sans-serif; text-align: center; margin-top: 50px;}</style></head><body><h1>404 - A rövidített URL nem található.</h1><p>A keresett rövidített URL nem létezik vagy lejárt.</p><p><a href='/'>Vissza a főoldalra</a></p></body></html>";
exit();
}
} catch (PDOException $e) {
// Adatbázis hiba esetén
header("HTTP/1.0 500 Internal Server Error");
echo "<!DOCTYPE html><html lang='hu'><head><meta charset='UTF-8'><title>500 Belső szerver hiba</title><style>body{font-family: Arial, sans-serif; text-align: center; margin-top: 50px;}</style></head><body><h1>500 - Belső szerver hiba</h1><p>Adatbázis hiba történt az átirányítás során.</p></body></html>";
exit();
}
}
// ----- HTML KÓD (az URL rövidítő űrlapja) -----
?>
<!DOCTYPE html>
<html lang="hu">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Egyszerű URL Rövidítő PHP-val</title>
<meta name="description" content="Hozd létre saját URL rövidítődet PHP-val és MySQL-lel. Egyszerű, gyors és könnyen használható.">
<meta name="keywords" content="URL rövidítő, PHP, MySQL, webfejlesztés, rövidített link, redirect, htaccess, saját URL rövidítő">
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #f4f7f6;
color: #333;
margin: 0;
padding: 20px;
display: flex;
flex-direction: column;
align-items: center;
min-height: 100vh;
}
.container {
background-color: #ffffff;
padding: 30px 40px;
border-radius: 10px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
max-width: 600px;
width: 100%;
text-align: center;
}
h1 {
color: #2c3e50;
margin-bottom: 25px;
font-size: 2.2em;
}
p {
line-height: 1.6;
}
.message {
padding: 12px 20px;
margin-bottom: 20px;
border-radius: 8px;
font-weight: bold;
display: block;
text-align: left;
}
.message.success {
background-color: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
.message.error {
background-color: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
.message.info {
background-color: #d1ecf1;
color: #0c5460;
border: 1px solid #bee5eb;
}
form {
display: flex;
flex-direction: column;
gap: 15px;
margin-top: 20px;
}
input[type="url"] {
padding: 12px 15px;
border: 1px solid #ccc;
border-radius: 8px;
font-size: 1em;
width: calc(100% - 30px);
box-sizing: border-box;
}
input[type="url"]:focus {
border-color: #007bff;
outline: none;
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25);
}
button[type="submit"] {
background-color: #007bff;
color: white;
padding: 12px 25px;
border: none;
border-radius: 8px;
cursor: pointer;
font-size: 1.1em;
font-weight: bold;
transition: background-color 0.3s ease;
}
button[type="submit"]:hover {
background-color: #0056b3;
}
a {
color: #007bff;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
</style>
</head>
<body>
<div class="container">
<h1><strong>Egyszerű URL Rövidítő</strong></h1>
<p>Írd be az alábbi mezőbe a hosszú URL-t, és mi rövidítjük neked, hogy könnyedén megoszthasd!</p>
<?php if (!empty($message)): ?>
<div class="message <?php echo strpos($message, 'sikeresen') !== false ? 'success' : (strpos($message, 'Hiba') !== false ? 'error' : 'info'); ?>">
<?php echo $message; ?>
</div>
<?php endif; ?>
<form method="POST" action="index.php">
<input type="url" name="long_url" placeholder="Példa: https://www.valami-hosszuepitesu-weboldal.hu/ez-egy-nagyon-hosszadalmas-link-amit-roviditeni-szeretnenk?parameter1=ertek¶meter2=masikertek" required value="<?php echo htmlspecialchars($longUrl); ?>">
<button type="submit"><strong>Rövidítés</strong></button>
</form>
</div>
</body>
</html>
Az index.php
magyarázata:
require_once 'config.php';
: Ez a sor betölti az adatbázis kapcsolódási adatokat és létrehozza a$pdo
objektumot, amit a lekérdezésekhez használunk.generateShortCode()
függvény: Ez a funkció felelős az egyedi, 6 karakteres rövid kódok generálásáért.- Alfanumerikus karaktereket használ.
- A
while (!$isUnique)
ciklus biztosítja, hogy a generált kód valóban egyedi legyen az adatbázisban, mielőtt visszaadná. Ez aCOUNT(*)
lekérdezéssel történik. - Ez egy egyszerű megvalósítás. Profi rendszerek ennél bonyolultabb algoritmusokat (pl. Base62 kódolást az ID-ból) is használnak, ami garantáltabban egyedi és ütközésmentes.
- URL rövidítési logika (
if ($_SERVER['REQUEST_METHOD'] === 'POST' ...)
):- Ellenőrzi, hogy
POST
kéréssel érkezett-e az űrlap elküldése. - A
trim()
eltávolítja a felesleges szóközöket az URL elejéről és végéről. filter_var($longUrl, FILTER_VALIDATE_URL)
: Ez egy biztonságos és hatékony módja az URL érvényességének ellenőrzésére.- Először megpróbáljuk lekérdezni, hogy az adott hosszú URL már létezik-e az adatbázisunkban. Ha igen, akkor azt a rövid kódot adjuk vissza, így elkerülve a felesleges duplikációkat.
- Ha nem létezik, generálunk egy új rövid kódot, majd a PDO prepared statements segítségével biztonságosan beillesztjük az adatokat az adatbázisba. A
bindParam()
védekezik az SQL injekciók ellen. - Sikeres mentés után megjelenítjük a rövidített URL-t.
- Hiba esetén (pl. validációs hiba, adatbázis hiba) megfelelő üzenetet jelenítünk meg.
- Ellenőrzi, hogy
- URL átirányítási logika (
else if (isset($_GET['code']) ...)
):- Ez a rész akkor lép életbe, ha az
index.php
fájlt egy rövid kóddal hívják meg, amit az.htaccess
fájl fog acode
GET paraméterbe tenni. - A kódot lekérdezzük az adatbázisból.
- Ha találunk hozzá hosszú URL-t, akkor a
header("Location: ...")
függvénnyel átirányítjuk a felhasználót az eredeti URL-re. Azexit()
itt kritikus fontosságú, hogy megakadályozza a további kód futását az átirányítás után. - Ha nem találjuk a kódot, 404-es HTTP státuszkódot küldünk, és egy felhasználóbarát 404-es oldalt jelenítünk meg.
- Ez a rész akkor lép életbe, ha az
- HTML struktúra és CSS:
- Egy egyszerű HTML formot tartalmaz az URL beviteléhez és a rövidítés gombjához.
- A
htmlspecialchars()
függvényt minden kimenő adatnál használjuk (pl. a rövidített URL linkjének kiírásánál), hogy védekezzünk az XSS (Cross-Site Scripting) támadások ellen. - A beépített CSS stílusok egy alapvető, de esztétikus megjelenést biztosítanak az űrlapnak és az üzeneteknek.
4. Lépés: A .htaccess
fájl
Ez a fájl teszi lehetővé, hogy a rövidített linkjeink szépen nézzenek ki (pl. sajatom.hu/abcde
a sajatom.hu/index.php?code=abcde
helyett). Hozd létre a .htaccess
fájlt ugyanabban a könyvtárban, ahol az index.php
és a config.php
is található, és másold bele a következő kódot:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Ha a kérés egy létező fájlra vagy könyvtárra vonatkozik, hagyjuk figyelmen kívül
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Ha a kérés egy 6-10 karakter hosszú alfanumerikus string,
# akkor irányítsuk át az index.php-nak 'code' paraméterrel
RewriteRule ^([a-zA-Z0-9]{6,10})$ index.php?code=$1 [L]
</IfModule>
A .htaccess
magyarázata:
<IfModule mod_rewrite.c>
: Ez ellenőrzi, hogy az Apachemod_rewrite
modulja engedélyezve van-e. Enélkül az átírás nem működne.RewriteEngine On
: Bekapcsolja az átírási motort.RewriteBase /
: Megadja az alapkönyvtárat, ahonnan az átírások indulnak. Ezt valószínűleg a gyökérkönyvtárra kell állítani, ha a projekt a domain gyökerében van.RewriteCond %{REQUEST_FILENAME} !-f
ésRewriteCond %{REQUEST_FILENAME} !-d
: Ezek a feltételek azt mondják, hogy az átírásokat csak akkor alkalmazzuk, ha a kért URL NEM egy létező fájl (-f
) és NEM egy létező könyvtár (-d
). Ez megakadályozza, hogy például a CSS vagy JS fájlokra vonatkozó kérések is átírásra kerüljenek.RewriteRule ^([a-zA-Z0-9]{6,10})$ index.php?code=$1 [L]
: Ez a fő átírási szabály.^([a-zA-Z0-9]{6,10})$
: Ez egy reguláris kifejezés, ami megvizsgálja a bejövő URL-t. Azt keresi, hogy az URL gyökérkönyvtára után (pl.sajatom.hu/
után) pontosan 6-10 karakter hosszú, csak angol betűket (kis- és nagybetűket) és számokat tartalmazó string van-e. A zárójelek (()
) elfogják ezt a stringet egy csoportba.index.php?code=$1
: Ha a minta illeszkedik, az URL-t átírja erre a belső útvonalra. A$1
hivatkozik az első elfogott csoportra (a rövid kódra).[L]
: ALast
zászló azt jelenti, hogy ha ez a szabály illeszkedik, akkor az Apache ne keressen további átírási szabályokat.
Ha nem Apache webszervert használsz (pl. Nginx), akkor másfajta konfigurációra lesz szükséged, de az elv hasonló: át kell irányítani a rövid kódokat az index.php
fájlra egy paraméterrel.
Tesztelés és használat
Most, hogy minden fájl a helyén van, teszteljük is le!
- Töltsd fel a fájlokat (
config.php
,index.php
,.htaccess
) a webszervered gyökérkönyvtárába (vagy egy alkönyvtárba). - Nyisd meg a böngésződben a domain nevedet (pl.
http://localhost/url-shortener/
vagyhttp://sajatom.hu/
). - Meg kell jelennie az URL rövidítő űrlapjának.
- Írj be egy hosszú URL-t (pl.
https://hu.wikipedia.org/wiki/Programoz%C3%A1si_nyelvek_list%C3%A1ja
), majd kattints a „Rövidítés” gombra. - Ha minden jól megy, kapsz egy rövidített URL-t (pl.
http://localhost/url-shortener/ABCDEF
). - Kattints rá erre a rövidített linkre, és ellenőrizd, hogy átirányít-e az eredeti hosszú URL-re.
- Próbálj meg egy nem létező rövidített URL-t megnyitni (pl.
http://localhost/url-shortener/NEMLETEREK
), ekkor meg kell jelennie a 404-es hibaoldalunknak.
Biztonsági megfontolások és továbbfejlesztések
Az általunk épített URL rövidítő egy remek alap, de mint minden webes alkalmazás, ez is továbbfejleszthető és biztonságosabbá tehető:
- SSL/TLS (HTTPS): Mindig használj HTTPS-t a domaineden! Ez titkosítja a kommunikációt a felhasználó böngészője és a szerver között, megvédve az adatokat.
- Szigorúbb validáció: Bár a
filter_var(..., FILTER_VALIDATE_URL)
jó, kiegészítheted további ellenőrzésekkel (pl. feketelista tiltott domainekre, vagy ellenőrzöd, hogy az URL elérhető-e). - Rövid kód generálása: A jelenlegi random generálás ütközéseket okozhat (bár az egyediségi ellenőrzés megoldja), és hosszabb időt vehet igénybe, ha sok URL-t rövidítenek. Gondolkodhatsz el a Base62 kódolás használatán (pl. az adatbázis ID-jából generálsz rövid kódot), ami garantáltan egyedi és hatékonyabb.
- Adatbázis backup: Rendszeresen készíts biztonsági mentést az adatbázisról!
- Látogatottság mérése: Kiegészítheted a
urls
táblát egyclicks
oszloppal (INT DEFAULT 0
), amit minden átirányításkor megnövelsz. Ezzel alapvető statisztikákat kaphatsz. - Felhasználói felület: Egy fejlettebb CSS és JavaScript segítségével sokkal interaktívabb és vonzóbb felületet készíthetsz.
- Admin felület: Készíthetsz egy jelszóval védett admin felületet, ahol listázhatod, szerkesztheted, törölheted a rövidített URL-eket, és láthatod a statisztikájukat.
- API: Ha szeretnéd, hogy más alkalmazások is tudjanak URL-eket rövidíteni a rendszereden keresztül, készíthetsz hozzá egy egyszerű REST API-t.
- Lejárati idő: Adhatsz a rövidített URL-eknek lejárati időt, utána törölhetők vagy inaktiválhatók.
Összefoglalás
Gratulálok! Sikeresen elkészítetted az első saját PHP és MySQL alapú URL-rövidítődet. Ez a projekt nemcsak egy praktikus eszközt ad a kezedbe, hanem számos fontos webfejlesztési koncepciót is megmutatott: adatbázis-kezelés PDO-val, URL validáció, szerveroldali logika, .htaccess
átírások és alapvető biztonsági elvek.
Ahogy láthattad, még egy ilyen egyszerű alkalmazás is milyen sok részletet rejt magában. Ne feledd, a kódolás folyamatos tanulás és fejlődés. Használd ezt az alapot, kísérletezz vele, bővítsd a tudásodat, és építs még nagyszerűbb dolgokat!
Sok sikert a további fejlesztésekhez!
Leave a Reply