Лекции     Книги     Рефераты    
Диплом, курсовая на заказ

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

news date мая.09.2008    categories Web-программирование > PHP    comments (0)

Довольно часто бывает необходимость получить случайную строку из файла огромного размера (ну, например из списка прокси-серверов в полмиллиона строк), [ну а что - бывает и такое :) ] … При этом использование таких функций как file() – [возвращает массив строк], или file_get_contents() – [возвращает строку] – ни в коем случае не рекомендуется , так как можно забить всю оперативку, либо, в лучшем случае, получить отлуп по memory_limit в настройках PHP .

Предлагаю код, который поможет решить данную проблему.
Код работает с текстовым файлом практически любого размера (миллионы строк)…

Разбор кода:

<?php
//открываем файл для чтения
$proxyfile=fopen (‘./proxies.txt’, ‘r’);

//ставим указатель в конец файла
fseek($proxyfile, 0, SEEK_END);

// получаем размер файла (для файлов огромного размера filesize() может не работать)
$len = ftell($proxyfile);

// Генерим случайное число в диапазоне от нуля до размера файла (минус 20 добавлено, чтоб не попасть в самый конец файла)
$posrand=mt_rand(0, $len)-20;

// Перемещаем указатель в случайную позицию
fseek($proxyfile, $posrand);

// получаем строку, на которую мы попали указателем (строка может быть неполной, так как случайная позиция указателя может быть в любом месте строки)
$line = fgets($proxyfile);

// Возвращаем следующую строку, которая уже точно будет полной и применяем к ней trim()
$proxy= trim(fgets($proxyfile));

//закрываем файл
fclose($proxyfile);
?>

Рассмотрим функции, которые были использованы:

  • fopen – открывает файл (в нашем случае – только для чтения)
  • fclose – закрывает файл
  • fseek – Устанавливает смещение в файловом указателе (или, простым языком, – двигает курсор)
  • ftell – Сообщает текущее смещение чтения/записи файла
  • mt_rand – генерирует псевдослучайное число (ибо ничто в этом мире не бывает случайным :) )
  • fgets – Читает строку из файла
  • trim – Удаляет “мусор” из начала и конца строки

Как видим, PHP богат библиотечными функциями для работы с текстом на любой вкус :)

Желаю удачи, и, как обычно, жду вопросов и пожеланий…


Обсуждения

Нет комментариев к “Случайная строка из текстового файла большого размера.”

Добавить комментарий

Вы должны войти



© 2009 - 2010 | Webteach.ru | Образовательный портал