Почему моя пользовательская библиотека CodeIgniter дает сбой с довольно запутанным сообщением об ошибке? - PullRequest
1 голос
/ 30 июня 2010

Итак, я собрал эту библиотеку 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, в которой она работала отлично.Я даже пытался переименовать функции и класс, если что-то было зарезервировано, но это не имеет значения.

Есть идеи?Спасибо, я очень ценю помощь!

Джек

Ответы [ 3 ]

0 голосов
/ 30 июня 2010

Вторая строка должна быть class BaseCrypt extends Library.Вот почему это не работает.

0 голосов
/ 30 июня 2010

Проблема решена !

В основном проблема заключалась в том, что я $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');

Проще - но также значительно сложнее - чем я сначала подумал!

Спасибо всем за помощь,

Jack

0 голосов
/ 30 июня 2010

Убедитесь, что вы не загружаете автоматически проверку формы lib

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...