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

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

12.01.2016, 13:17. Показов 5832. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru