Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 11.01.2016
Сообщений: 5

Notice: Uninitialized string offset - разбор ошибок

12.01.2016, 13:17. Показов 5876. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток всем.

Кратко суть: при парсинге страницы с помощью simple_html_dom.php сталкиваюсь с предупреждением типа
Code
1
Notice: Uninitialized string offset: 0 in C:\%путь%\simple_html_dom.php on line 707
вот код, который использую я:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
require_once 'php/simple_html_dom.php';
$text = file_get_contents("url.com");
if ($text) {
    $text=iconv ("CP1251", "UTF-8",$text);
    $html_text=str_get_html($text);
    echo '<div class=""> <ul>';
    if($html_text->innertext!='' and count($html_text->find('a'))){
        foreach($html_text->find('a') as $links)
            if (strpos($links->href,"\/")!=1) //если ссылка внешняя ( НЕ начинается с "/")
                echo '<li><a target= "_blank" href="'.$links->href.'">'.$links->plaintext.'</a></li></br>';
            else //если ссылка внутренняя - добавляем адрес хоста
                echo '<li><a target= "_blank" href="url.com'.$links->href.'">'.$links->plaintext.'</a></li></br>';
    }
    echo '</ul></div>';
}
else echo '<br>Сервер временно недоступен, попробуйте обновить страницу';
?>

при этом вышеуказанный notice появляется ровно столько раз, сколько в коде конструкций типа
PHP
1
$html_text->find('a')
После часов поисков в интернете и на форуме, пришел к выводу что наилучший способ решения проблемы в моем конкретном случае - на время работы "моего" парсера отключить ошибки типа E_NOTICE, а потом вернуть все как было.
Именно в этом и состоит суть задачи: сохранить текущее состояние->от ключить уровень E_NOTICE->собственно парсинг->вернуть изначальное состояние.

Заранее благодарю за помощь.
P.S. PHP изучаю всего "без года неделю", так что не судите строго, если вдруг код "кривой" или изложение задачи неправильное.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.01.2016, 13:17
Ответы с готовыми решениями:

Uninitialized string offset: 0
в общем скрипт работает и до того как я включил показ ошибок я об этом и незнал ( а может и не стоит вообще заморачиваться на этом, ошибка...

Uninitialized string offset возникают ошибки
Все привет возникают ошибки Notice: Undefined index: id_number in /test/test1.php on line 179 строка $id_number =...

Notice: Undefined offset
Имеется ряд ошибок: otice: Undefined offset: 0 in /var/www/adminlinpcrus/data/www/gamele.ru/includes/functions_game.php on line 270 ...

7
182 / 182 / 83
Регистрация: 18.02.2014
Сообщений: 867
12.01.2016, 14:39
Vagrant, просто переменная пустая. Кидаете пустышку вот он и пугается. надо сделать проверку на
PHP
1
2
if (!empty($var))
   //code
0
0 / 0 / 0
Регистрация: 11.01.2016
Сообщений: 5
12.01.2016, 15:41  [ТС]
xpoince, какая именно переменная у меня пустая?.
На сколько я понял, в переменную $html_text записывается обьект класса simlpe_html_dom(), и если это так, то эта переменная не пустая, поскольку цикл
PHP
1
foreach($html_text->find('a') as $links)
таки выводит нужные мне ссылки.
0
182 / 182 / 83
Регистрация: 18.02.2014
Сообщений: 867
12.01.2016, 15:49
Vagrant, Вот наглядный пример.
PHP
1
2
3
4
[0] => 'www.www.www', // succes
[1] => array(0 => ''), // Notice: Uninitialized string offset: 0
[2] => 'www1.www.www', // succes
[3] => '', // Notice: Uninitialized string offset: 0
0
0 / 0 / 0
Регистрация: 11.01.2016
Сообщений: 5
12.01.2016, 18:24  [ТС]
xpoince, повторюсь, я начал разбирать азы php совсем недавно, поэтому я (надеюсь, временно) не сильно разбираюсь во всех тонкостях. Но, исходя из вашего примера, у меня в каком-то из массивов (предполагаю, массив ссылок) есть элемент типа string с пустым содержанием, так? и если так, то обрабатывается он кодом библиотеки simple_html_dom.php, что опять таки приводит меня к варианту временного отключения обработки E_NOTICE.

Добавлено через 1 час 55 минут
Оказалось, что всё значительно проще... достаточно было использовать префикс "@".

Спасибо огромное, узнал для себя что-то новое ;-)
0
182 / 182 / 83
Регистрация: 18.02.2014
Сообщений: 867
12.01.2016, 18:47
Vagrant, к сожалению это не проще. Почитайте что вы скрыли. @ лучше избегать в использование, бывают случаи когда надо @ использовать, но это не есть хорошо. Вы в таком случае могли просто убрать notice и все. @ не покажет вам критическую ошибку и вы будете тратить кучу времени что бы вспомнить где вы прописали @ да и вообще если вспомните что писали @
0
25 / 25 / 15
Регистрация: 12.10.2013
Сообщений: 183
12.01.2016, 18:54
Цитата Сообщение от xpoince Посмотреть сообщение
да и вообще если вспомните что писали @
Правильно ли понимаю, что @ - сокрытие критической ошибки в месте установки @?
0
0 / 0 / 0
Регистрация: 11.01.2016
Сообщений: 5
12.01.2016, 19:28  [ТС]
xpoince, я изначально и формулировал суть задачи:
Цитата Сообщение от Vagrant Посмотреть сообщение
сохранить текущее состояние->от ключить уровень E_NOTICE->собственно парсинг->вернуть изначальное состояние
а "@" делает какраз то что нужно.

n0n4m3r, да, "@" заставляет php игнорировать любые ошибки в выражениях. Выражение, как я понял, является единственно-правильным местом его использования.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.01.2016, 19:28
Помогаю со студенческими работами здесь

Notice: Undefined offset
«Notice: Undefined offset: 1 in /var/www/mobidvor/data/www/mobidvor.ru/kiseli/parser.php on line 49 Notice: Undefined offset: 2 in...

Notice: Undefined offset: 1 in
Notice: Undefined offset: 1 in C:\AppServ\www\11\bazar\podogrev.php on line 20 КОД: $fakes = ($_POST); for($i = 0,$c =...

Ошибка - Notice: Undefined offset
Добрый день не найду ошибку Notice: Undefined offset: 0 in public function getAllSale(){ $goods = $this-&gt;getAll(); ...

Предупреждение - Notice: Undefined offset
Привет всем. Нужна помощь. Выбивает ряд предупреждений этого типа: Notice: Undefined offset: 125 in...

Ошибка Notice: Undefined offset: 0
Добрый день! Я не опытный программист, требуется небольшая помощь в решении ситауции! Имеется небольшой скрипт вывода случайной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru