我正在使用本指南 - http://kevin.vanzonneveld.net/techblog/article/create_short_ids_with_php_like_youtube_or_tinyurl/
生成网址的短代码。
但是bcpow()无论如何都不能在我的系统上运行。
我正在使用php-cli和phpinfo();显示已安装bcmath。
数字到短代码 -
function aplhaIdCalc( $in ) {
$index = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$base = 62;
$out = "";
for ($t = floor(log($in, $base)); $t >= 0; $t--) {
$bcp = bcpow($base, $t);
$a = floor($in / $bcp) % $base;
$out = $out . substr($index, $a, 1);
$in = $in - ($a * $bcp);
}
$out = strrev($out); // reverse
return $out;
}
短码到数字 -
function idAlphaCalc( $in ) {
$index = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$base = 62;
$in = strrev($in);
$out = 0;
$len = strlen($in) - 1;
for ($t = 0; $t <= $len; $t++) {
$bcpow = bcpow($base, $len - $t);
$out = $out + strpos($index, substr($in, $t, 1)) * $bcpow;
}
$out = sprintf('%F', $out);
$out = substr($out, 0, strpos($out, '.'));
return $out;
}
如何在没有bcpow的情况下使用这些函数,并获得类似的输出和输入?
我无法理解这些BCMath函数,但我认为base_convert可能有用。
修改:将bcpow
更改为pow
有效。使用pow
时会涉及哪些风险?
答案 0 :(得分:1)
数学函数与BC数学函数之间的差异:
所以精确度就是答案。
当然bcmath
已加载?在我的本地环境中测试你的功能。没问题。
你的第一个函数aplhaIdCalc
=&gt;中有拼写错误alphaIdCalc
答案 1 :(得分:0)
如果bcmath扩展名不起作用,那么你可以使用exec:
$pow = `echo '135^71' | bc`;
无论如何要小心逃避数字。但是,如果在循环中完成,这是一个非常慢的解决方法。
答案 2 :(得分:0)
原来我使用了错误的php路径。安装了bcmath的那个是/ usr / local / lib / php,我在shebang中使用了/ usr / bin / php。