PHP函数调用函数

时间:2014-03-26 15:25:43

标签: php function loops

使用链接缩短脚本,我很难过。我认为以下代码可以根据需要运行,但是我获得了与$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;

任何帮助都会非常感激,想想也许我只是被烧毁了。

2 个答案:

答案 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)因此生成无休止的循环。