Php 为什么我的自定义CodeIgniter库会出现一条相当混乱的错误消息而失败?

Php 为什么我的自定义CodeIgniter库会出现一条相当混乱的错误消息而失败?,php,codeigniter,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) {

所以我把这个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 */
是的,$id肯定已经设置好了。但是,什么也没有发生,我将此错误消息写入我的PHP日志:

PHP致命错误:在第4行的/Users/Jack/Sites/mysite.com/system/application/views/code/viewajax.PHP中调用未定义的方法CI_Form_validation::encrypt

我想,这有点可疑。CI_表单_验证?!我从来没有在任何地方提到过。。。是吗

作为最后的确认,我将这两个函数encode和decode放入另一个自定义库中,该库名为Awards.php,并通过$this->Awards->encode$id调用它,效果非常好

为了让事情变得更加混乱,我将整个Awards.php文件复制粘贴到Basecrypt.php中,只是重命名了类声明,然后再次尝试通过$this->Basecrypt->encode$id调用它-但是,这引发了相同的错误。尽管Basecrypt版本与Awards版本之间没有任何差异,但在Awards版本中,它工作得非常好。我甚至尝试过重命名函数和类,以防保留某些内容,但这没有什么区别

有什么想法吗?谢谢,我真的很感谢你的帮助


Jack

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

第二行应该是class BaseCrypt extends Library。这就是它不工作的原因。

问题解决了

基本上,问题是我没有正确地加载Basecrypt库

我使用的代码是:$this->load->library'tank\u auth','awards','basecrypt'

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

所以,为了解决这个问题,它是这样修复的:

$this->load->library('tank_auth');
$this->load->library('awards');
$this->load->library('basecrypt');
比我最初想象的要简单,但也要复杂得多

谢谢大家的帮助


杰克

问了一个彻底的、经过充分研究的问题,做得很好!我没有解决办法,但我有一些建议。您是否尝试过将Basecrypt.php的内容替换为Awards.php的内容,并尝试调用$this->Awards函数?另外,尝试用一个简单的库替换Basecrypt.php,该库包含一个简单的函数,比如die'I am cool'。谢谢Steven!所以,情节变得更复杂了。。。我刚刚尝试了您的第一个建议,并从Basecrypt.php运行了一个奖励函数-同样的错误也会发生!我让Basecrypt变得非常简单。这就是事情变得非常奇怪的地方。运行$this->basecrypt->run-where函数run只是说dieiam cool可以正常工作。但是如果我改跑步说“我很酷”,我就错了SSORY,当评论不允许换行时,很难很好地格式化内容!
$this->load->library('tank_auth');
$this->load->library('awards');
$this->load->library('basecrypt');