@brunot

Как перемешать строки в большом файле (до 1,5гб) средствами php?

В общем, скрипт откопал на форуме, мешает норм но при большом объеме файла, где-то срабатывает какой-то лимит, при том:

5118f538b40b444eb4b66ca56f1cd534.png (денвер на винде)

Вопрос скорее стоит таком образом: где еще нужно выключить ограничение, чтобы заработало?

Сам скрипт для микса такой:

<?php 

ini_set('memory_limit', '-1');
ini_set('max_execution_time', '-1');

$start = microtime(true);
define('NL',chr(13).chr(10));  
$file='file.txt'; 
$arr=explode(NL,file_get_contents($file));  
$f=fopen($file,'w'); 
shuffle($arr);  
fputs($f,implode(NL,$arr));  
fclose($f);  

$time = microtime(true) - $start;
printf('Скрипт выполнялся %.4F сек.', $time);

?>


Что пишет:

4b5f57fb8c3141d19b61c08bd616db1c.png

Также не против рассмотреть другие подходящие решения
  • Вопрос задан
  • 1055 просмотров
Решения вопроса 1
@Wol_fi
php, js, mysql, highload
Какие-то неправильные у вас пчёлы, $arr=explode(NL,file_get_contents($file)); - это плохо для любого языка, не только php, читать весь файл в память.
Вот тут есть пример для перемешивания файла, без его полной загрузки, с использованием позиций строк.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
saboteur_kiev
@saboteur_kiev
software engineer
Почему бы не воспользоваться SQL? Загоняете строки в SQL, а рандомизируете только индексы, или отдельный столбец с номером строки. Работать будет гораздо быстрее. Случайный доступ к нужной строке тоже быстрее. Памяти вообще не будет потреблять. Масштабируется.
Ответ написан
Комментировать
romy4
@romy4
Exception handler
ну или без SQL.
Набиваете массив строк (от 0 до к-во строк в файле). shuffle этого массива, потом считываете по одному значению из массива, читаете этот номер строки, записываете в новый файл.
Не забудьте сохранять позиции начала строк, относительно начала файла. 10 минут дела.
Ответ написан
Комментировать
Не мешайте весь файл целиком, разделите на адекватное количество частей.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Ведисофт Екатеринбург
от 25 000 ₽
YCLIENTS Москва
от 200 000 до 350 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
04 мая 2024, в 17:58
10000 руб./за проект
04 мая 2024, в 17:40
1000 руб./за проект
04 мая 2024, в 17:35
150000 руб./за проект