使用链接缩短脚本,我很难过。我认为以下代码可以根据需要运行,但是我获得了与$str .= $charset[mt_rand(0, $count-1)];
相关的执行时间。我已经多次搜索代码,我无法找到我做错的事。
function randString($length, $charset='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') {
$str = '';
$count = strlen($charset);
while ($length--) {
$str .= $charset[mt_rand(0, $count-1)];
}
return $str;
}
function shrinkURL($url) {
$is_unique = false;
$num = 4;
$random_string = randString($num);
$count = 0;
while (!$is_unique) {
$q1 = "SELECT id FROM linkShortner WHERE short = '".$random_string."' LIMIT 1";
$result = mysql_query($q1) or die(mysql_error());
if ($result === false) // if you don't get a result, then you're good
$is_unique = true;
else // if you DO get a result, keep trying
$count++;
if ($count >= 10) {
$num = (strlen($random_string) + 1);
$random_string = randString($num);
$count = 0;
}
$random_string = randString($num);
}
$shortURL = "https://domain.com/l/".$random_string;
$q2 = "INSERT INTO linkShortner (id, destination, short, shorURL, creationDate) VALUES (NULL, '".$url."', '".$random_string."', '".$shortURL."', '".$DateTime."')";
$r2 = mysql_query($q2) or die(mysql_error());
return $shortURL;
}
$shortURL = shrinkURL('http://domain.com');
echo $shortURL;
任何帮助都会非常感激,想想也许我只是被烧毁了。
答案 0 :(得分:1)
我的猜测是,在某些时候,randString()
参数为0时,将调用函数$length
。
这将使:
while ($length--) {
$str .= $charset[mt_rand(0, $count-1)];
}
卡住了,因为第一次迭代是while (-1)
,这是真的。然后while (-2)
,这也是真的..等等等。
我会将您的while ( $length-- )
更改为while ( $length-- >= 0 )
答案 1 :(得分:0)
将if ($result === false)
更改为if (!mysql_num_rows($result))
,一切顺利。 if ($result === false)
适用于此处未使用的mysqli。
基本上,在尝试插入唯一的字符串/行之前,shrinkURL函数会在数据库中搜索匹配的字符串,if ($result === false)
将永远不会为false,因为$result
的值为MySQL_query($q1)
因此生成无休止的循环。