为什么我的自定义CodeIgniter库失败并出现相当混乱的错误消息?

时间:2010-06-29 20:46:29

标签: php codeigniter

所以我把这个CodeIgniter库放在一起,将东西加密到Base62并再次解密。

在有人要求之前,该文件是application / libraries / Basecrypt.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%确定,我已经在自动加载和我的控制器中加载了Basecrypt。这是我正在使用它的地方:

$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)调用它 - 但是,这会引发同样的错误。尽管该版本的Basecrypt与其完美无缺的奖项版本之间没有差异。我甚至尝试重命名函数和类,因为保留了一些东西,但它没有任何区别。

有什么想法吗?谢谢,我非常感谢你的帮助!

杰克

3 个答案:

答案 0 :(得分:0)

确保您没有自动加载表单验证库

答案 1 :(得分:0)

第二行应为class BaseCrypt extends Library。这就是它无法正常工作的原因。

答案 2 :(得分:0)

问题已解决

基本上,问题是我错误地$this->load->了Basecrypt库。

我使用的代码是:$this->load->library('tank_auth','awards','basecrypt')

我错误地认为您可以以数组形式加载库,就像在其他各种实例中一样。事实证明,加载具有该语法的库实际上是说我将加载tank_auth,使用awards参数创建它,并将其命名为basecrypt ...

所以,为了解决这个问题,它被解决了这个问题:

$this->load->library('tank_auth');
$this->load->library('awards');
$this->load->library('basecrypt');

比我最初想的更简单 - 但也更复杂!

感谢大家的帮助,

杰克

相关问题