Важная информация
Показано с 1 по 2 из 2

Тема: Ошибка Notice: Undefined offset: 0

  1. #1 Ошибка Notice: Undefined offset: 0 
    Новичок
    Регистрация
    22.01.2017
    Сообщений
    1
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Добрый день!

    Я не опытный программист, требуется небольшая помощь в решении ситауции!

    Имеется небольшой скрипт вывода случайной строки из случайного файла из случайной папки.

    Данный скрипт работает, но время от времени выдает ошибку:

    Notice: Undefined offset: 0 on line 12

    Итак, как работает скрипт:

    1. Он берет список файлов из определенной папки и случайным образом выбирает один файл (в папке содержится около 2000 текстовых файлов, количество файлов постоянно меняется)
    2. Из выбранного файла он берет случайную строку (все файлы разного размера с разным количеством строк, но в основном размер файлов колеблется от 5 Мб. до 50 Мб.)
    3. Полученную строку он выводит на экран монитора.

    Я прекрасно понимаю, что Notice - это не ошибка а предупреждение и ее можно смело заглушить, но проблема в том, что при возникновении этого предупреждения ничего на экран не выводится а нам требуется чтобы всегда выводилась случайная строка из файла при каждом перезагрузке страницы.

    Я перерыл большое количество литературы и читал много ответов по этой "ОШИБКЕ" но ничего не могу сделать.

    Пробовал оборачивать в Get и POST но результатов не дало.

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

    Забегая вперед скажу, что база строк занимает 10 Гб. Т.е. выборку нужно делать из 10 Гб. текстовых строк разной длины.

    Возможно есть какоето решение с базой данных mysql или какойто движок сайта, который можно использовать под данную задачу?

    А Вот и сам код:
    PHP Code:
    1. <?php
    2. //указываем папку с файлами
    3. $folder = 'полный путь к папке с txt файлами';
    4. $files = [Ссылки могут видеть только зарегистрированные пользователи. ]();
    5. $files = [Ссылки могут видеть только зарегистрированные пользователи. ]($folder);
    6. //выбираем случайный файл из папки
    7. $files_rand = $files[[Ссылки могут видеть только зарегистрированные пользователи. ](0,[Ссылки могут видеть только зарегистрированные пользователи. ]($files)-1)];
    8. //выбираем случайную строку из файла
    9. $all_str = [Ссылки могут видеть только зарегистрированные пользователи. ]($folder.'/'.$files_rand);
    10. $i = [Ссылки могут видеть только зарегистрированные пользователи. ](0,[Ссылки могут видеть только зарегистрированные пользователи. ]($all_str)-1);
    11. //выводим строку
    12. echo $all_str[$i];
    13. ?>


    ЗАРАНЕЕ БЛАГОДАРЕН!
    Последний раз редактировалось helken; 22.01.2017 в 10:38.
    Ответить с цитированием  
     

  2. #2  
    Администратор Аватар для rovico
    Регистрация
    17.04.2014
    Адрес
    Ярославль
    Сообщений
    245
    Сказал(а) спасибо
    17
    Поблагодарили 287 раз(а) в 162 сообщениях
    Записей в блоге
    2
    Цитата Сообщение от helken Посмотреть сообщение
    Пробовал оборачивать в Get и POST но результатов не дало.
    Зачем? Если вы получаете или передаёте данные между серверами или от клента к серверу - то да ,конечно вам нужны POST или GET

    Цитата Сообщение от helken Посмотреть сообщение
    какойто другой движок для сайта
    Движок сайта на ваш скрипт не влияет. Можете использовать любой движок для сайта

    Цитата Сообщение от helken Посмотреть сообщение
    Возможно есть какоето решение с базой данных mysql
    Разница при использовании MySQL будет такой, что там будут индексированные поля и будет ускорена выборка конкретной записи по конкретному индексу. Можно использовать Sphinx для улучшения поиска по словам.
    Может, если говорить о переходе на СУБД, лучше будет рассмотреть какую-нибудь NOSQL СУБД, например MongoDB

    Теперь по делу:
    Игнорировать Notice и Warning я считаю плохой идеей. Обязательно поставьте условие на строке 12 и проверяйте в нём, существует ли такой индекс. Если индекс не существует, выберите другую строку, например [i-1] предварительно записав в лог (создайте функцию записи в файл) номер строки и название файла, в котором произошла такая ошибка. Так вы во-первых избежите Notice, во-вторых вынесете действия по чтению строки в отдельный метод, в-третьих вы сумеете отследить через лог что происходит и как избежать ошибки в дальнейшем.
    Ответить с цитированием  
     

  3. 2 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (23.01.2017), Free Admin (23.01.2017)

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ошибка при перестановке ОС
    от AntonNoob в разделе Операционные системы
    Ответов: 1
    Последнее сообщение: 02.01.2017, 08:17
  2. ошибка в nginx
    от Наталья Григорьева в разделе Сервера
    Ответов: 1
    Последнее сообщение: 26.11.2016, 23:48
  3. ошибка irql_not_less_or_equal на win 8
    от Александр Дзусь в разделе Общие вопросы программирования
    Ответов: 3
    Последнее сообщение: 10.08.2015, 22:33
  4. Ответов: 6
    Последнее сообщение: 29.05.2015, 12:37
  5. Ошибка в дебаге.
    от fizuch в разделе Assembler
    Ответов: 16
    Последнее сообщение: 20.01.2011, 02:06
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •