Нужна помощь PHP

1. 3DwEp 27.01.2012 / 16:12
Вообщем на денвере скрипт работает нормально, но на хосте выдаёт такую ошибку:
Notice: Uninitialized string offset: 21 и.т.д. 
Сам скрипт это генератор специального хэша. Получает из одного кода другой.
Погуглил и нашёл похожую проблему.

И тут уже мне помог великий Google, оказывается что на 64 битной системе функция
работает не корректно, так как используются битовые операции которые завязаны на 32х битные процессоры, и лечиться беда эта изменением функции на следующую.
Ссылка: http://php-mysql-life.blogspot.com/2011/10/xls-spreadsheetexcelreader-olereadinc.html
Вообщем нужно переписать в генераторе какую-то ф-цию.
Кто поможет? Цена ваша.

2. Андрей 27.01.2012 / 16:25
Предназначение функции?

3. KOZZ 27.01.2012 / 16:38
в массиве нет элемента с ключом 21, и так далее, а ты пытаешься к ним обратиться

4. 3DwEp 27.01.2012 / 16:39
2. Фанат, хз, хз, я вообще не понимаю, алгоритм не я писал, но код понять можно)
eGo Где Мой Кэш7, на локалке же работает

5. KOZZ 27.01.2012 / 16:45
Notice: Uninitialized string offset:
я не читал пост полностью к сожалению, прочитал только сам notice.
на локалке может быть просто отключено отображение ошибок.

6. 3DwEp 27.01.2012 / 16:46
Notice: Uninitialized string offset: 21 in /var/www/***/***/www/file.php on line 56
56 строка:
 if ($str[$i] == $c)
пфф..
5. eGo Где Мой Кэш7, включено, никаких ошибок нет

7. KOZZ 27.01.2012 / 16:47
6, значит на момент ошибки переменная $i содержит значение 21, а ключа 21 не существует в массиве $str

8. 3DwEp 27.01.2012 / 16:51
7. eGo Где Мой Кэш7, ну на локале же работает, а на хосте нет, и мне говарили подобное что на 64 битных может не работать, блин.. хз.. Не посмотриш?

9. KOZZ 27.01.2012 / 17:06
8. nickname, насколько я знаю php никаким образом не зависит от того, скольки битная система

10. 3DwEp 27.01.2012 / 17:07
9. eGo Где Мой Кэш7, http://php-mysql-life.blogspot.com/2011/10/xls-spreadsheetexcelreader-olereadinc.html
9. eGo Где Мой Кэш7, ну так что, посмотриш? если будет работать пару соток дам)

11. Вантуз-мен 27.01.2012 / 17:07
вообще всегда надо включать ошибку в данном случае у тебя предупреждение о необъявленной переменной
или нет такого ключа в массиве $str или не существует переменной $c
напиши какой там выше у тебя код

12. 3DwEp 27.01.2012 / 17:09
<?php

class HashGenerator
{
    var $SYMB_COUNT = 62;
    var $ARRAY_0 = array(0, 1, 2, 3, 4, 5, 6, 6, 7, 7, 8, 9, 9, 10, 11, 12, 13, 13, 14, 15, 15, 16, 16, 17, 18, 19, 20, 21, 22, 23, 40, 41, 42, 45);
    var $ARRAY_1 = array(-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, 0, 0, 0, 0, -5, -5, 0, -3, 0, 0, 0, 0, 0, -7, -1, 0, -8, -8, -4, -11, -6, 0, 0, -3, 0, -5, 0, 0, -3, 0, 0, 0, 0);

    var $Key;
    var $field_606; // Errors count   (if more than 2 midlet ask restart the chat)
    var $Symb;
    var $field_31;
    var $field_1282;
    var $field_1280;
    var $field_378_length;
    var $field_427;
    var $field_542;
    var $field_1122;
    var $field_425; // just must be greater than field_1122
    var $field_660;
    var $field_379;
    var $field_431; // Press/Release keys count
    var $field_1281;
    var $field_11 = array();
    var $field_511 = array();

    public function __construct($GotKey) {
      $this->Key               = $GotKey;
      $this->field_606         = -1;
      $this->Symb              = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
      $this->field_31          = 123;
      $this->field_1282        = '0';
      $this->field_1280        = '0';
      $this->field_378_length  = 222;
      $this->field_427         = 55;
      $this->field_542         = 0;
      $this->field_1122        = 6;
      $this->field_425         = 323;
      $this->field_660         = 97;
      $this->field_379         = 0;
      $this->field_431         = 0;
      $this->field_1281        = 755;
      for ($i=0;$i<=33;$i++) $this->field_11[$i] = $this->ARRAY_0[$i];
      for ($i=0;$i<=46;$i++) $this->field_511[$i] = $this->ARRAY_1[$i];
      return true;
    }

    function SetGotKey($GotKey) {
      $this->Key = $GotKey;
    }

    function IndexOf($str, $c) {
      $rtn = 0;

      for ($i=0;$i<=strlen($str);$i++)
      if ($str[$i] == $c)
всё до 56 строки

13. Вантуз-мен 27.01.2012 / 17:14
напиши код метода indexOf здесь

сделай так if (isset($str[$i]) && $str[$i] == $c)

14. 3DwEp 27.01.2012 / 17:20
function IndexOf($str, $c) {
      $rtn = 0;

      for ($i=0;$i<=strlen($str);$i++)
      if ($str[$i] == $c)
      {
        $rtn = $i + 1; break;
      }
      return $rtn;
    }


15. Андрей 27.01.2012 / 17:32
<?php

function IndexOf($str, $c)
{
    $rtn = 0;
    $a = mb_strlen($str, 'UTF-8');
    for ($i = 0; $i <= $a; $i++) {
        if (isset($str[$i]) and $str[$i] == $c) {
            $rtn = $i + 1;
            break;
        }
    }
        
    return $rtn;
}

?>


16. 3DwEp 27.01.2012 / 17:40
15. Фанат, теперь ошибку не выдаёт, но и сам скрипт не работает. Вообщем должно выводить
999 :AUTH OK
на локалке - работает. на хосте - нет.
Вот сам скрипт: http://cms.ailep.ru/hash.zip

17. ramzes 27.01.2012 / 18:47
for ($i = 0; $i < $a; $i++)
Это вместо вот этого
for ($i = 0; $i <= $a; $i++)

18. 3DwEp 28.01.2012 / 17:31
17. ramzes, не помогло, на хосте скрипт не пашет sad
это из за 32 битных ф-ций каких-то..

19. Станислав 28.01.2012 / 17:35
12. nickname, блиииин, а чего так кустарно? Чего-то у меня даже в голове не представляется, чего ты там делаешь.

20. 3DwEp 28.01.2012 / 17:35
19. SNELS, алгоритм писал не я, его переписывали с дельфи на пых.. ну очень нужен он рабочий на хосте sad

21. Станислав 29.01.2012 / 17:39
20. Чак Норис, ну так ты напиши, что ты хочешь сделать. Вот мне лень даже многобукав читать =)

22. 3DwEp 30.01.2012 / 22:00
21. SNELS, там специальный алгоритм получения из одного кода - другого (читает ответ от сервера, и для того чтобы авторизоватся нужно сгенерировать полученый хэш через данный алгоритм)

23. Санёк 31.01.2012 / 05:48
архив перезалей.

URL: https://visavi.net/topics/28859