Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: порезать файл на части
 
 автор: pav   (12.09.2006 в 17:00)   письмо автору
 
 

Вем привет
Проблема следущая: уменя на хостинге лежит медиа файл необходимо его порезать по 10 мб и положить эти части в туже директорию где лежит файл
Как прочитать файл с 0 кбайт до 10 000 и записать в файл1.txt
как прочитать файл с 10 000 кб и записать в файл2.txt и т.д

   
 
 автор: cheops   (12.09.2006 в 18:29)   письмо автору
 
   для: pav   (12.09.2006 в 17:00)
 

Возможно вам будет интересна тема по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=827.

   
 
 автор: pav   (24.09.2006 в 10:56)   письмо автору
 
   для: cheops   (12.09.2006 в 18:29)
 

cheops
спасибо за скрипт рабоет нормально, но с большиим файлами(~500мб) возникает проблема т.к. буфер у хостинга не предусмотрен на такой размер, тут же возникает вопрос: как можно сделать чтобы скрипт читал сперва один кусок к примеру 100 мб сбрасывал его в файл потом чистил буфер, а потом следующий?

   
 
 автор: cheops   (24.09.2006 в 13:24)   письмо автору
 
   для: pav   (24.09.2006 в 10:56)
 

Если работа ведётся с такими большими файлами следует идти через связку fopen() + fget() вместо функции file_get_contents(). Функция fget() в цикле читает файл по строчно. Вам обязательно, чтобы все файлы были одинакового размера или можно, чтобы каждый из них содержал, скажем по 1000 строк?

   
 
 автор: pav   (24.09.2006 в 14:09)   письмо автору
 
   для: cheops   (24.09.2006 в 13:24)
 

cheops
Желательно чтобы куски были в пределах от 5-8 мб но я думаю можно этого добится определенным количеством строк, если Вы знаете как это реализовать и Вас не затруднит приведите здесь код.

   
 
 автор: cheops   (24.09.2006 в 14:38)   письмо автору
 
   для: pav   (24.09.2006 в 14:09)
 

Можно поступить следующим образом
<?php 
  
// Имя файла 
  
$filename "linux.words"
  
// Строк в одном файле
  
$numberlines 1000;
  
// Считаем сколько строк в файле
  
$fd fopen($filename"r");
  
$count 0;
  while(!
feof($fd))
  {
    
$line fgets($fd);
    
$count++;
  }
  
// Устанавливаем файловый курсор в начало
  
rewind($fd);
  
// Разбиваем файл на куски
  
$old "part.".sprintf("%04d",0);
  
$pt fopen($old"w");
  for(
$i 0$j 0$i $count$i++, $j++)
  {
    
$numberfiles $i/$numberlines;
    
$name "part.".sprintf("%04d",$numberfiles);
    if(
$old != $name)
    {
      
fclose($pt);
      
$pt fopen($name"w");
    }
    
$line fgets($fd);
    
fwrite($pt,$line);
    
$old $name;
  }
  
fclose($fd);
?>

При помощи переменной $numberlines отрегулируйте количество строк в файлах-частях, так чтобы у вас получались куски удобного размера.

   
 
 автор: pav   (24.09.2006 в 15:00)   письмо автору
 
   для: cheops   (24.09.2006 в 14:38)
 

cheops
Все работает отлично! Большое спасибо за помощь!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования