Большой файл .txt (15,5 МБ) анализируется с использованием PHP - PullRequest
1 голос
/ 15 июля 2011

Моя задача - проанализировать большой файл .txt (около 15 000 строк) в базе данных MySQL. Проблема в том, что я работаю с максимальным временем выполнения 30 секунд. Я пытался использовать это:

        $handle = @fopen('http://www.someothersiteyouknow.com/bigfile.txt', "r"); 
    if ($handle) { 
       while (!feof($handle)) { 
           $lines[] = fgets($handle, 4096); 
       } 
       fclose($handle); 
    }

Затем я могу получить доступ к массиву $ lines и проанализировать данные, в зависимости от того, что мне нужно, но для завершения работы скрипта требуется слишком много времени. У меня такое чувство, что я должен читать файл кусками, возможно, по 1000 строк за раз. Но я только понимаю, как читать с начала файла .txt. Пожалуйста, не могли бы вы поделиться некоторыми идеями о том, как сделать это правильно? Просто чтобы прояснить, мне не нужны конкретные примеры кода, только идеи о том, как анализировать большие файлы .txt с помощью PHP.

Ответы [ 3 ]

2 голосов
/ 15 июля 2011

Попробуйте добавить set_time_limit в ваш цикл.

Также, если это разовая вещь, вы можете посмотреть на это с помощью файла данных загрузки mySQL ?

2 голосов
/ 15 июля 2011

Если вы можете поместить свой файл на сервер, тогда вы можете попытаться использовать запрос LOAD DATA INFILE. Он имеет множество опций для разбора ввода и работает достаточно быстро. Начните экспериментировать с небольшой частью вашего файла. Если сервер заканчивает тем, что вставляет все в одну строку, настройте партию LINES TERMINATED BY, указав '\n' или '\r\n'. Затем дважды проверьте количество строк по отношению к количеству строк в файле, и SELECT некоторые из них, чтобы увидеть, что в итоге оказалось в таблице.

2 голосов
/ 15 июля 2011

Это не лучшая идея, если честно. Что если несколько пользователей одновременно обращаются к одной и той же странице или около нее? Вы будете иметь (число пользователей * большой текстовый файл) обрабатываться одновременно.

Предложите вам принести файл локально (сохранить его локально, если файл еще не существует) и работать с локальным файлом. Это должно помочь сократить время транзакции

Это должно помочь вам достичь предела 30 с ... если загрузка файла занимает не более 30 с!

...