什么是php函数bcpow的替代品?

时间:2011-01-11 10:36:41

标签: php

我正在使用本指南 - 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时会涉及哪些风险?

3 个答案:

答案 0 :(得分:1)

数学函数与BC数学函数之间的差异:

  • Math:这些数学函数只会 处理范围内的值 你的整数和浮点类型 计算机
  • BC Math:任意精度 数学PHP提供二进制 支持数字的计算器 任何尺寸和精度,代表 作为字符串。

所以精确度就是答案。

当然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。