За последние 24 часа нас посетили 25266 программистов и 1736 роботов. Сейчас ищут 916 программистов ...

Появились ошибки в скрипте при загрузке его на хостинг.

Тема в разделе "PHP для новичков", создана пользователем блудный сын, 1 фев 2009.

  1. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Написал не маленький скрипт, как и положено протестировал его на своей тачке с виндой, загрузил на хостин и появилась куча ошибок. Подскажите, что значат следующие ошибки:
    Fatal error: [] operator not supported for strings in /home/.../page.php on line 6
    Строка 6: $zone[]="R";
    Разве нельзя добавить элемент в массив не присваивая явно ему индекс?
     
  2. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    И вот еще: Warning: in_array() [function.in-array]: Wrong datatype for second argument in /home/.../page.php on line 32
    Строка 32: if (!in_array($good,$zone))
     
  3. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    а $zone ранее объявлена как массив?
    PHP:
    1. $zone = array();
     
  4. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Нет. А что так надо делать?
     
  5. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Ну в общем если так надо делать, то сделал, хотя мне не попадалось такое требование в книгах по РНР. Везде стразу присваивают переменным массива значения и это работает. Но наверно так и нужно делать, т.к. первая ошибка пропала. А вот это осталось: Warning: in_array() [function.in-array]: Wrong datatype for second argument in /home/.../page.php on line 32
    Строка 32: if (!in_array($good,$zone))
    Подскажите, что ему в этой строке не нравится?
     
  6. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Спасибо, это у меня глаза уже устали. Ошибка в 32 строке пропала, а текущая оказывается в 37 строке. Там тоже был массив, но не был обозванным как массив. Исправил - заработало. Спасибо! Осталось только узнать, почему на хостинге требуется явное указание что это массив?
     
  7. sylex

    sylex Активный пользователь

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
    я везде задаю на всякий. Тоже встречался с таким
     
  8. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Прикол в том, что в скрипте еще куча других массивов и с ними in_array() работает без их явного объявления. Подскажите, в каких случая необходимо явно объявлять что переменная является массивом?
     
  9. sylex

    sylex Активный пользователь

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
    я думаю лучше всегда в любом случае, так надежней
     
  10. PHP:
    1. <?php
    2. $a[1] = 's';
    3. echo '$a type is '.gettype($a).'<br/>';
    4. $a = 'string';
    5. $a[1] = 's';
    6. echo '$a type is '.gettype($a).'<br/>';
    7. $a = '';
    8. $a[1] = 's';
    9. echo '$a type is '.gettype($a).'<br/>';
    10. ?>
     
  11. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    А $zone нигде до этого не используется как строка?
    PHP:
    1.  
    2. <?php
    3. $zone = 'hello';
    4. // ...
    5. $zone[] = 123;
     
  12. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Нет, не используется! Но я на этой почве сделал ОТКРЫТИЕ! Я могу завалить даже вот такой простой скрипт!:
    PHP:
    1.  
    2. <?php
    3.  $a[]="a";
    4.  $a[]="b";
    5.  $a[]="c";
    6.  ?>
    7.  
    Кто угадает как? :)
     
  13. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    register_globals
     
  14. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Да! Прикиньте, оно у меня на хостинге по умолчанию оказывается включено!
    Поэтому если в адресной строке послать ?a=nechto , то получаем ошибку: Fatal error: [] operator not supported for strings in /home/.../page.php on line
     
  15. sylex

    sylex Активный пользователь

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
    блудный сын
    конечно, или даже можно добавить туда чего-нить в твой массив! ;)
     
  16. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Как???
    Ведь осталось непонятным самое главное! Почему выскакивает ошибка если в адресной сроке поставить ?a=nechto ???

    Вот скрипт:
    PHP:
    1.  
    2. <?php
    3.  $a[]="a";
    4.  $a[]="b";
    5.  $a[]="c";
    6.  ?>
    7.  
    и при обращении к нему /script.php?a=nechto появляется ошибка
    Fatal error: [] operator not supported for strings in /home/.../page.php on line
    а если просто вызывать /script.php никакой ошибки нет.
     
  17. sylex

    sylex Активный пользователь

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
    потому что она строкой становится, и надо делать
    PHP:
    1. $a = array();
    о чем и говорили в начале..

    можно так:
    /script.php?a[0]=blabla&a[1]=next_value
     
  18. sylex

    sylex Активный пользователь

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
    если не будет в начале, конечно, $a = array(), то смотри результат :)
     
  19. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    sylex, cпасибо! Дошло :)