php работа с файлами - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB93.4409
BTC/USD66130.6629
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 28.10.2010, 18:04   #1
aoki
Senior Member
 
Регистрация: 05.10.2009
Сообщений: 687
Бабло: $152005
По умолчанию php работа с файлами

Необходимо решить одну задачу, помогите пожалуйста.
Есть текстовый файл в котором 100000-200000 строк, нужен скрипт при обращении к которому он выводил в эхо первые 100 строк из этого файла, дописывал в конец другого файла эти 100 строк, и убирал из начала исходного файла первые 100 строк.
aoki вне форума  
Старый 28.10.2010, 18:54   #2
DrRobert
Юниор
 
Регистрация: 09.09.2010
Сообщений: 6
Бабло: $2705
По умолчанию

PHP код:
<?
$file1 
'1.txt';
$file2 '2.txt';

// Получаем первые 100 строк из файла
$file1_content file($file1);
$first_100 array_slice($file1_content,0,100);
foreach (
$first_100 as $str) echo $str.'<br>';
$first_100 implode('',$first_100);

// Удаляем первые 100 строк из файла
$file1_output array_slice($file1_content,100);
$file1_output implode('',$file1_output);


// Сохраняем
$f2 fopen($file2,'a');
fwrite($f2,$first_100);
fclose($f2);

$f1 fopen($file1'w');
fwrite($f1$file1_output);
fclose($f1);
?>
DrRobert вне форума  
Старый 29.10.2010, 00:26   #3
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

Цитата:
Сообщение от DrRobert Посмотреть сообщение
PHP код:
$file1_content file($file1); 
совет тебе мой: не делай так, когда объемы большие

а по теме я бы сделал так:
Код:
выводим первые 100 строк:
  [oya@ebu]$  sed 100q 1.txt

выводим их в другой файл
  [oya@ebu]$  sed 100q 1.txt >> 2.txt

удаляем первые 100 строк:
  [oya@ebu]$  sed -i '1,100d' 1.txt
и какой смысл писать длинные php скрипты, когда есть sed?
который есть на любом хостинге, тем более примеров его использования в инете полно. Пишем в гугле: "sed вывести первые 10 строк"
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 05.11.2010, 09:41   #4
aoki
Senior Member
 
Регистрация: 05.10.2009
Сообщений: 687
Бабло: $152005
ТС -->
автор темы ТС По умолчанию

Есть скрипт он нормально работает когда в текстовом файле меньше 60000 строк, делаешь больше выдаёт пустой экран.
Как можно модернизировать скрипт чтобы он нормально работал с файлом где несколько миллионов строк.

Цитата:
<?php
$file=file("file.txt");
for ($g = 1; $g <= 300; $g++) {
$i = rand(0, 25035);
echo $file["$i"];
}
?>
aoki вне форума  
Старый 05.11.2010, 10:31   #5
Markus
Ня?
 
Аватар для Markus
 
Регистрация: 13.12.2009
Сообщений: 42
Бабло: $9990
По умолчанию

Цитата:
Сообщение от aoki Посмотреть сообщение
Есть скрипт он нормально работает когда в текстовом файле меньше 60000 строк, делаешь больше выдаёт пустой экран.
Как можно модернизировать скрипт чтобы он нормально работал с файлом где несколько миллионов строк.
PHP код:
set_time_limit(0); 
Markus вне форума  
Старый 05.11.2010, 11:11   #6
0xDEAD
Senior Member
 
Аватар для 0xDEAD
 
Регистрация: 03.11.2009
Сообщений: 151
Бабло: $20330
По умолчанию

Цитата:
Сообщение от Markus Посмотреть сообщение
PHP код:
set_time_limit(0); 
Вряд ли поможет, у него весь файл в память грузится
0xDEAD вне форума  
Старый 05.11.2010, 14:04   #7
Skif
Senior Member
 
Аватар для Skif
 
Регистрация: 17.08.2010
Сообщений: 175
Бабло: $25010
По умолчанию

Цитата:
Сообщение от aoki Посмотреть сообщение
Есть скрипт он нормально работает когда в текстовом файле меньше 60000 строк, делаешь больше выдаёт пустой экран.
Как можно модернизировать скрипт чтобы он нормально работал с файлом где несколько миллионов строк.
Весь скрипт просто не переваривает сам пхп, ему памяти не хватает, можно увеличить количество памяти для пхп максимальное или примерно так:
cat file |sort -R | head -n 300
Skif вне форума  
Старый 05.11.2010, 15:13   #8
aoki
Senior Member
 
Регистрация: 05.10.2009
Сообщений: 687
Бабло: $152005
ТС -->
автор темы ТС По умолчанию

Я по другому сделал, разделил файл на другие файлы, сначала рандомом выбирается файл, а потом из него выбираются строки.
aoki вне форума  
Старый 05.11.2010, 15:48   #9
RedHead
Senior Member
 
Аватар для RedHead
 
Регистрация: 26.08.2008
Адрес: UA
Сообщений: 2,941
Бабло: $402835
По умолчанию

ну да, такой вариант норм, навскидку можно еще построчно один раз считать чтобы узнать количество строк, а второй раз - случайно брать строки, пропуская остальные.
RedHead вне форума