您好,欢迎访问一九零五行业门户网

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

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/') );

php5.6输出结果为:
array( [0] => mvvizz [1] => qurrjy [2] => u7rizu [3] => jnnjbi)

php7输出结果为:
array( [0] => aaaaaa [1] => aaaaaa [2] => aaaaaa [3] => aaaaaa)

这是哪的问题?
回复内容: 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/') );

php5.6输出结果为:
array( [0] => mvvizz [1] => qurrjy [2] => u7rizu [3] => jnnjbi)

php7输出结果为:
array( [0] => aaaaaa [1] => aaaaaa [2] => aaaaaa [3] => aaaaaa)

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

推荐信息