Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите устранить Undefined offset
 
 автор: seletsky   (18.05.2010 в 17:20)   письмо автору
 
 

Привет всем! Тема такая:
Стоит новый PHP и при включении сообщений об ошибках просто ими закидал, половину разобрал сам, осталось то к чему ум приложить не могу, вот что он выдает:

Notice: Undefined offset: 4 in /var/www/xxx/yyy/script.php on line 4
Notice: Undefined offset: 3 in /var/www/xxx/yyy/script.php on line 4
Notice: Undefined offset: 2 in /var/www/xxx/yyy/script.php on line 4

А вот собственно и 4-я строка скрипта:

list($address['p1'],$address['p2'],$address['p3'],$address['p4'],$address['p5'])=explode(".",$_SERVER['SERVER_NAME']);

Думаю комментарии излишне, все ясно и так. В старой версии PHP этот код работал как автомат калашникова, а в новой капризной к синтаксису нет. Мое предположение что ругается на explode. Разбивал эту строку и номер менялся на тот где стоит explode.
Пытался найти решение гуглами, и яндексами а находил только успешно проиндексированные страницы со схожими ошибками. Помогите плиз.

  Ответить  
 
 автор: Tonik992   (18.05.2010 в 17:26)   письмо автору
 
   для: seletsky   (18.05.2010 в 17:20)
 

в начале скрипта сделай
error_reporting(0);

Хотя это избавит от всех ошибок, т.е. не будет выводиться ни одна ошибка...


можно попробовать вот так:
error_reporting(E_ALL ^ E_NOTICE);

Что избавит тебя от занозы

  Ответить  
 
 автор: SeletSKY   (18.05.2010 в 17:30)   письмо автору
 
   для: Tonik992   (18.05.2010 в 17:26)
 

Но это не способ решения проблемы. Я их специально включил для тестирования модулей.

  Ответить  
 
 автор: root   (18.05.2010 в 17:40)   письмо автору
 
   для: SeletSKY   (18.05.2010 в 17:30)
 

а с чего Вы взяли, что explode Вам столько элементов вернет?
и что Вы потом делаете со всеми
$address['p1'],$address['p2'],$address['p3'],$address['p4'],$address['p5'] ?

  Ответить  
 
 автор: SeletSKY   (18.05.2010 в 18:06)   письмо автору
 
   для: root   (18.05.2010 в 17:40)
 

А что здесь в общем не понятного то?

допустим есть адрес www.name1.name2.ru
Отсюда следует ->
$address['p1']=www
$address['p2']=name1
$address['p3']=name2
$address['p4']=ru
$address['p5']= null

Какая разница что потом с ними делаю и из этого можно сделать вывод что идет разбор доменного имени.. что это даст Вам? Думаете все скрывается в пятом пустом $address['p5']?

  Ответить  
 
 автор: sim5   (18.05.2010 в 18:23)   письмо автору
 
   для: SeletSKY   (18.05.2010 в 18:06)
 

А функции работы с url, чем вам не подходят?
Ошибки следуют из вашего заблуждения.

  Ответить  
 
 автор: Саня   (18.05.2010 в 18:48)   письмо автору
 
   для: seletsky   (18.05.2010 в 17:20)
 

<?
$expld 
explode(".""softtime.ru");
$address['p1'] = $expld[0];
$address['p2'] = $expld[1];
$address['p3'] = $expld[2];
$address['p4'] = $expld[3];
$address['p5'] = $expld[4];
Что произойдёт при исполнении этого кода?

  Ответить  
 
 автор: SeletSKY   (18.05.2010 в 19:02)   письмо автору
 
   для: Саня   (18.05.2010 в 18:48)
 

Александр, если я по Вашему заблуждаюсь, так укажите в чем, мы же не в школу играем!? Тот код нужен для настройки сайта для работы по определенным доменам, в разных зонах с поддоменами. Необходим разбирать адрес и правильно реагировать. Повторюсь в ранней версии php все работало отлично, и сейчас работает, но вечное сообщение ломает картину работающего сайта. Что надо сделать чтобы убралось это сообщение, не простым отключением сообщений, а правильно сделать чтобы сообщение пропало. После перехода на новую версию пхп много ошибок вылетело, все разгреб осталось это.

  Ответить  
 
 автор: Саня   (18.05.2010 в 19:19)   письмо автору
 
   для: SeletSKY   (18.05.2010 в 19:02)
 

Я вроде тонко намекнул в чём проблема. Если не понимаете тонко, тогда попробую толсто:
в list() нельзя передавать переменных больше, чем есть элементов в массиве.

В ранних версиях, возможно, это поведение было другим, но сейчас оно именно такое.
И не надо так бурно реагировать. Мы же не в школе...

  Ответить  
 
 автор: SeletSKY   (18.05.2010 в 19:32)   письмо автору
 
   для: Саня   (18.05.2010 в 19:19)
 

Извини если что-то "бурно" реагирую, но пока я только получал ответ вопросом на вопрос. В лист переменных больше попасть не может, только меньше, остальная часть массива останется пустой. Может в этом дело, я понять не могу, так может дойдем до логического объяснения в ходе рассуждения

  Ответить  
 
 автор: Саня   (18.05.2010 в 19:43)   письмо автору
 
   для: SeletSKY   (18.05.2010 в 19:32)
 

Правильно — останется пустой. О чем PHP заботливо извещает своим notice.
Причину этого я проиллюстрировал в (18.05.2010 в 18:48)

  Ответить  
 
 автор: seletsky   (18.05.2010 в 20:19)   письмо автору
 
   для: Саня   (18.05.2010 в 19:43)
 

Спасибо, Саш за помощь. Я заменил на $address=explode(".",$_SERVER['SERVER_NAME']); и полность перепишу этот скрипт

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования