Итак, я собрал эту библиотеку CodeIgniter, чтобы зашифровать материал в Base62 и снова расшифровать его.
Непосредственно перед тем, как кто-нибудь спросит, это файл application / library / 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: вызов неопределенного метода CI_Form_validation :: encrypt () в /Users/Jack/Sites/mysite.com/system/application/views/code/viewajax.php в строке 4
Я подумал, это немного подозрительно.CI_Form_validation ?!Я никогда не упоминал, что где-нибудь ... не так ли?
Так что в качестве окончательного подтверждения я поместил две функции encode () и decode () в другую пользовательскую библиотеку (называемую Awards.php) и назвал еечерез $this->awards->encode($id)
- и , которые работали совершенно нормально !
Чтобы сделать вещи еще более запутанными, я скопировал весь файл Awards.php в Basecrypt.php, переименовав только объявление классаи еще раз попытался вызвать его через $this->basecrypt->encode($id)
- однако это выдает ту же ошибку.Несмотря на отсутствие различий между той версией Basecrypt и версией Awards, в которой она работала отлично.Я даже пытался переименовать функции и класс, если что-то было зарезервировано, но это не имеет значения.
Есть идеи?Спасибо, я очень ценю помощь!
Джек