所以我把这个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与其完美无缺的奖项版本之间没有差异。我甚至尝试重命名函数和类,因为保留了一些东西,但它没有任何区别。
有什么想法吗?谢谢,我非常感谢你的帮助!
杰克
答案 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');
比我最初想的更简单 - 但也更复杂!
感谢大家的帮助,
杰克