Added additional error handling with hash collision
This commit is contained in:
parent
0466bd0720
commit
595667d433
22
index.php
22
index.php
|
@ -30,7 +30,6 @@ function count_urls($dbh) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function generate_short($url, $dbh) {
|
function generate_short($url, $dbh) {
|
||||||
|
|
||||||
if(!preg_match("/^((https?|ftp)[:\/\/].*\/{2,})/i",$url)) {
|
if(!preg_match("/^((https?|ftp)[:\/\/].*\/{2,})/i",$url)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -42,34 +41,33 @@ function generate_short($url, $dbh) {
|
||||||
} else {
|
} else {
|
||||||
$clientip = $_SERVER['REMOTE_ADDR'];
|
$clientip = $_SERVER['REMOTE_ADDR'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$sth = $dbh->prepare("SELECT id FROM " . DB_TABLE . " WHERE url=?");
|
$sth = $dbh->prepare("SELECT id FROM " . DB_TABLE . " WHERE url=?");
|
||||||
$sth->bindParam(1, $url, PDO::PARAM_STR);
|
$sth->bindParam(1, $url, PDO::PARAM_STR);
|
||||||
$sth->execute();
|
$sth->execute();
|
||||||
if ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
|
if ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
|
||||||
$hash = $row['id'];
|
$hash = $row['id'];
|
||||||
} else {
|
} else {
|
||||||
|
$hash = substr(str_shuffle(CHARSET), 0, HASH_LENGTH);
|
||||||
$charset = str_shuffle(CHARSET);
|
|
||||||
$hash = substr($charset, 0, HASH_LENGTH);
|
|
||||||
|
|
||||||
$sth = $dbh->prepare("SELECT COUNT(*) FROM " . DB_TABLE . " WHERE id=?");
|
$sth = $dbh->prepare("SELECT COUNT(*) FROM " . DB_TABLE . " WHERE id=?");
|
||||||
$sth->bindParam(1, $hash, PDO::PARAM_STR, HASH_LENGTH);
|
$sth->bindParam(1, $hash, PDO::PARAM_STR, HASH_LENGTH);
|
||||||
$sth->execute();
|
$sth->execute();
|
||||||
|
$loop = 0;
|
||||||
while ($sth->fetchColumn() > 0) {
|
while ($sth->fetchColumn() > 0) {
|
||||||
$hash = substr($charset, 0, HASH_LENGTH);
|
if ($loop == 10) {
|
||||||
|
$hash = "ERROR<br />Unable to create hash!";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$hash = substr(str_shuffle(CHARSET), 0, HASH_LENGTH);
|
||||||
$sth->bindParam(1, $hash, PDO::PARAM_STR, HASH_LENGTH);
|
$sth->bindParam(1, $hash, PDO::PARAM_STR, HASH_LENGTH);
|
||||||
$sth->execute();
|
$sth->execute();
|
||||||
|
$loop++;
|
||||||
}
|
}
|
||||||
|
|
||||||
$sth = $dbh->prepare("INSERT INTO " . DB_TABLE . " (id, url, ip, count) VALUES (?, ?, ?, '0')");
|
$sth = $dbh->prepare("INSERT INTO " . DB_TABLE . " (id, url, ip, count) VALUES (?, ?, ?, '0')");
|
||||||
$sth->bindParam(1, $hash, PDO::PARAM_STR, HASH_LENGTH);
|
$sth->bindParam(1, $hash, PDO::PARAM_STR, HASH_LENGTH);
|
||||||
$sth->bindParam(2, $url, PDO::PARAM_STR);
|
$sth->bindParam(2, $url, PDO::PARAM_STR);
|
||||||
$sth->bindParam(3, $clientip, PDO::PARAM_STR, 255);
|
$sth->bindParam(3, $clientip, PDO::PARAM_STR, 255);
|
||||||
if (!$sth->execute()) {
|
if (!$sth->execute()) {
|
||||||
print "FAILURE INSERTING\n";
|
$hash = "ERROR<br />Failed to insert hash!";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $hash;
|
return $hash;
|
||||||
|
@ -184,6 +182,8 @@ body {
|
||||||
<?php
|
<?php
|
||||||
if ($link === false) {
|
if ($link === false) {
|
||||||
echo "<span style='color: red;'>Unknown / Invalid URL</span>";
|
echo "<span style='color: red;'>Unknown / Invalid URL</span>";
|
||||||
|
} elseif (str_contains($link, "ERROR")) {
|
||||||
|
echo "<span style='color: red;'>$link</span>";
|
||||||
} else {
|
} else {
|
||||||
if ($link != '') {
|
if ($link != '') {
|
||||||
echo "<span style='color: white;'>" . BASE_URL . $link . "</span>";
|
echo "<span style='color: white;'>" . BASE_URL . $link . "</span>";
|
||||||
|
|
Loading…
Reference in New Issue