所以,我把这个CodeIgniter库放在一起,将内容加密到Base62中,并再次解密。
就在有人问起之前,文件是application/libraries/Basecrapt.php
以下是Basecrypt.php的内容:
    <?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Basecrypt
{       
    function encode($val) {
        // can't handle numbers larger than 2^31-1 = 2147483647
        $base = 62;
        $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $str = '';
        do {
            $i = $val % $base;
            $str = $chars[$i] . $str;
            $val = ($val - $i) / $base;
        } while($val > 0);
        return $str;
    }
    function decode($str) {
        $base = 62;
        $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $len = strlen($str);
        $val = 0;
        $arr = array_flip(str_split($chars));
        for($i = 0; $i < $len; ++$i) {
            $val += $arr[$str[$i]] * pow($base, $len-$i-1);
        }
        return $val;
    }
}
/* End of file Basecrypt.php */
/* Location: ./application/libraries/Basecrypt.php */没有什么特别令人惊讶的。只是编码和解码。据我所知,我遵循了CodeIgniter手册中指定的每条规则。
现在,要100%肯定的是,我已经在自动加载和我的控制器中装载了基地星。这里是我使用它的地方:
$id = $this->input->post('id');
echo $this->basecrypt->encrypt($id);是的,$id绝对是设置好了。但是,什么都没有发生,我收到了写在PHP日志中的错误消息:
PHP致命错误:调用第4行/Users/Jack/Sites/mysite.com/system/application/views/code/viewajax.php中的未定义方法CI_Form_validation::encrypt()
我想,这有点可疑。CI_Form_validation?!我从来没提过任何地方..。我做了吗?
因此,作为最后的确认,我将这两个函数encode()和decode()放入我正在使用的另一个自定义库(称为Awards.php),并通过$this->awards->encode($id)调用它--并通过完全工作良好的的!
更令人困惑的是,我将整个Awards.php文件复制到Basecrypt.php中,只重命名类声明,并再次尝试通过$this->basecrypt->encode($id)调用它-但是,这会引发相同的错误。尽管那个版本的“基地”和“颁奖”的版本没有什么区别,但它的运作非常好。我甚至尝试重命名函数和类,以防某些东西被保留,但这并没有什么区别。
有什么想法吗?谢谢,我真的很感激你的帮助!
杰克
发布于 2010-06-30 18:53:35
问题解决了!
基本上,问题是我在$this->load->不正确的基地图书馆。
我使用的代码是:$this->load->library('tank_auth','awards','basecrypt')
我错误地认为可以以数组的形式加载库,就像在其他各种情况下一样。事实证明,用这种语法加载库实际上是说我将加载tank_auth,用awards参数创建它,并将其命名为basecrypt.
因此,为了解决这个问题,它是这样解决的:
$this->load->library('tank_auth');
$this->load->library('awards');
$this->load->library('basecrypt');比我最初想的要简单,但也要复杂得多!
谢谢你们的帮助,
杰克
发布于 2010-06-29 21:50:15
确保没有自动加载表单验证库。
发布于 2010-06-30 11:39:31
第二行应该是class BaseCrypt extends Library。所以它才不起作用。
https://stackoverflow.com/questions/3144584
复制相似问题