ホームページ > バックエンド開発 > PHPチュートリアル > 生成短链接,php5.6可用,为什么php7生成不了?

生成短链接,php5.6可用,为什么php7生成不了?

WBOY
リリース: 2016-06-06 20:15:53
オリジナル
1024 人が閲覧しました

<code>function shortUrl($long_url){
    $key = '123';
    $base32 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    // 利用md5算法方式生成hash值
    $hex = hash('md5', $long_url.$key);
    $hexLen = strlen($hex);
    $subHexLen = $hexLen / 8;

    $output = array();
    for($i=0;$i> 5;
        }
        $output[$i] = $out;
    }
    // 生成位数
    return $output;

}


print_r( shortUrl('http://www.google.com/') );</code>
ログイン後にコピー
ログイン後にコピー

php5.6输出结果为:

<code>Array
(
    [0] => MVvIZz
    [1] => qURRjy
    [2] => U7rIzu
    [3] => JNNJbi
)</code>
ログイン後にコピー
ログイン後にコピー

php7输出结果为:

<code>Array
(
    [0] => aaaaaa
    [1] => aaaaaa
    [2] => aaaaaa
    [3] => aaaaaa
)</code>
ログイン後にコピー
ログイン後にコピー

这是哪的问题?

回复内容:

<code>function shortUrl($long_url){
    $key = '123';
    $base32 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    // 利用md5算法方式生成hash值
    $hex = hash('md5', $long_url.$key);
    $hexLen = strlen($hex);
    $subHexLen = $hexLen / 8;

    $output = array();
    for($i=0;$i> 5;
        }
        $output[$i] = $out;
    }
    // 生成位数
    return $output;

}


print_r( shortUrl('http://www.google.com/') );</code>
ログイン後にコピー
ログイン後にコピー

php5.6输出结果为:

<code>Array
(
    [0] => MVvIZz
    [1] => qURRjy
    [2] => U7rIzu
    [3] => JNNJbi
)</code>
ログイン後にコピー
ログイン後にコピー

php7输出结果为:

<code>Array
(
    [0] => aaaaaa
    [1] => aaaaaa
    [2] => aaaaaa
    [3] => aaaaaa
)</code>
ログイン後にコピー
ログイン後にコピー

这是哪的问题?

问题主要出现在这句话上
$idx = 0x3FFFFFFF & (1 * ('0x' . $subHex));
因为在php7中,十六进制的字符串不再被认为是数字,所以这里所采用的隐式转换变成了无效转换,导致结果出现了问题。
可以将此句替换为
$idx = 0x3FFFFFFF & hexdec($subHex);

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート