Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Чтение/редактирование огромного файла на php, оптимизация и минимизация затрат ресурса 
:(
    Опции темы
Zmiuko
  Дата 27.2.2010, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Ребят, у меня проблема.

Все знают как открыть файл на php, как его видоизменить посредством php, как удалить, выставить права и т.д.

Проблема у меня заключается в том, что необходимо прочесть, а точнее выдернуть строку из огромного файла, будь то 100-мегабайтный или гигабайтный файл. И не только выдернуть, но и потом редактировать. Например какая либо cvs база, условно.

Короче, как, каким образом можно оптимизировано и легко прочесть строку в гигабайтном файле на php?

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

Прошу помощи, так как уже долго маюсь этой проблемой. Не могу разрешить.

Заранее благодарен.

Добавлено через 2 минуты и 47 секунд
Речь идет не об использовании сторонних модулей, либо самописных на стороне сервера, речь идет об обычном php, стандартных функциях.
PM MAIL WWW ICQ Skype Jabber   Вверх
Fortop
Дата 27.2.2010, 07:57 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(Zmiuko @  27.2.2010,  06:30 Найти цитируемый пост)
По мне в теории неясно какие функции читают файл в целом, а какие можно использовать для перемещения курсора, таким образом чтобы и строка была найдена-прочитана, да еще чтобы файл целиком не читался и не вызывал остановку скрипта. Плюс то что ограничение в php всего на 8 мегабайт. 

http://php.net/fgets - читать построчно.

А вот изменить файл без полной перезаписи будет много сложнее. (и это зависит от того используются ли равноразмерные строки, или же переменной длины)
Для редактирования равноразмерных строк можно использовать
http://php.net/rewind
http://php.net/fseek
http://php.net/fwrite






--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Zmiuko
  Дата 27.2.2010, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Но fgets() читает весь полностью файл до указания байта. То есть файл весом в 1,5 Gb мы должны прочитать полностью, к примеру, 1,2 Gb, чтобы найти искомую строку. Любой хостинг, даже с указанием максимально возможного времени выполнения php-скрипта закроет выполнение с ошибкой и указателем на строку, на которой остановилось данное выполнение.

А вот если же мы какую либо базу держим в ассоциативных массивах, условно, для примера, то тут вообще почти будет невозможным совершить какое-либо чтение при достижении файла даже 10 мегабайт?

Нинавижу тестовые задания!

Добавлено через 10 минут и 35 секунд
Задам вопрос по-другому,

к примеру на сайт загружен файл для последущего анализа php-скриптом, в нем,  к примеру много-много сток, около 10-50 тысяч, файл вида:

строка1
строка2
строка3
...
строка12742
строка12743
...
строка54001
строка54002
...
строка100234
строка100235


,около 100235 строк, строки большие, где-то по 1 кб каждая.

Каким образом, посредством классического, пускай процедурного php, без сторонних модулей, возможно выдернуть и изменить строку, скажем 23567-ую ?
PM MAIL WWW ICQ Skype Jabber   Вверх
IZ@TOP
Дата 27.2.2010, 09:40 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Цитата(Zmiuko @  27.2.2010,  09:12 Найти цитируемый пост)
Но fgets() читает весь полностью файл до указания байта.

Если бы вы были внимательны, прочли в документации о том, что

length
Reading ends when length  - 1 bytes have been read, on a newline (which is included in the return value), or on EOF (whichever comes first). If no length is specified, it will keep reading from the stream until it reaches the end of the line. 

Из чего мы делаем вывод, что fgets читает с буфером построчно, где буфер - максимально возможная длинна строки в файле.
Совершенно не важно какого размера файл, подобная конструкция прочтет его целиком не поперхнувшись:

Код

fopen($file, 'r');  
while($string = fgets($file, 2048)) { // Читаем построчно с буфером в 2 кб
    if(($exists = strpos($string, $search))!==false) {
        break;
    } else {
         $bytes += strlen($string); // Определяем смещение в файле, если понадобится последующее его изменение
    }
    $le++; // Обновляем номер строки
}


И т.п., надеюсь из этого примера ясно, что с чем надо потреблять?


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Zmiuko
  Дата 27.2.2010, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Ну, тогда извиняюсь.

Проблему чтения файла большого размера я еще решил подобным образом:

1) читаем файл по кускам...
2) кусками сохраняем во временный файл...
3) если во временном файле искомого не обнаружено... то стираем временный файл и приступаем к чтению и сохранению следующего куска...


за 24 секунды выводит строку из 300mb файла

Но как быть с редактированием, тут сложнее, или возможно также делить кусками, что вполне реально и при нахождении строки заменять ее, а затем куски "склеивать" ?
PM MAIL WWW ICQ Skype Jabber   Вверх
Zmiuko
Дата 27.2.2010, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



 smile 
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 27.2.2010, 12:43 (ссылка) |  (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Цитата(Zmiuko @  27.2.2010,  10:02 Найти цитируемый пост)
Но как быть с редактированием

Наверное, ставить задачу так, чтобы при ее решении не требовалось оптимизированое редактинование стогигабайтного файла?
PM MAIL   Вверх
Zmiuko
  Дата 27.2.2010, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Я просто ищу какое-либо решение и выход из поставленной ситуации. Пока не могу придумать.
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 27.2.2010, 13:07 (ссылка) |  (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



А не надо ничего придумывать.
Если кто-то поставит задачу возить на велосипеде пятитонные металлоконструкции, то надо не думать над решением. А думать над умственным здоровьем постановщика задачи. И искать более адекватного.

С какой стати возник вопрос об оптимальной записи? Какая разница, будет она делаться 5 минут или 25?

Добавлено через 1 минуту и 14 секунд
Повторю, если непонятно.
Если задача ставится заведомо нерешаемая, то не нужно думать над ее решением.
Надо думать над ее изменением.

PM MAIL   Вверх
Zmiuko
  Дата 27.2.2010, 13:49 (ссылка) |  (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Хм. Но коль мне необходимо решить эту проблему, хочу я этого или нет. К чему философия?
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 27.2.2010, 13:56 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



К тому, что "необходимо" - это заблуждение, разумеется.

PM MAIL   Вверх
IgorIV
Дата 27.2.2010, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



А это случайно не видеофайл? smile
PM MAIL   Вверх
gcc
Дата 27.2.2010, 23:18 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



 smile  "бинарный поиск" тут нужно преминить?

Это сообщение отредактировал(а) gcc - 27.2.2010, 23:19
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 27.2.2010, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



Цитата(Zmiuko @ 27.2.2010,  10:02)
Ну, тогда извиняюсь.

Проблему чтения файла большого размера я еще решил подобным образом:

1) читаем файл по кускам...
2) кусками сохраняем во временный файл...
3) если во временном файле искомого не обнаружено... то стираем временный файл и приступаем к чтению и сохранению следующего куска...


за 24 секунды выводит строку из 300mb файла



если строки упорядоченные, отсортированные, так как вы написали, то нужно использовать "Двоичный_поиск"
http://ru.wikipedia.org/wiki/%D0%94%D0%B2%...%B8%D1%81%D0%BA

и друугие методы математические http://ru.wikipedia.org/wiki/%D0%9C%D0%B5%...%86%D0%B8%D0%B8

из wikipedia для бинарного:
Код

  i := 1;  { индекс первого элемента массива }
  j := n;  { индекс последнего элемента массива (0, если массив пуст) }
 
  while i <= j do begin
    { ищем элемент на интервале индексов от i до j, включительно }
    k := i + (j - i) div 2;  { k = элемент посередине интервала }
    if x > A[k] then
      i := k + 1
    else if x < A[k] then
      j := k - 1
    else
      break;  { искомый элемент найден }
  end;
 
  { алгоритм выше останавливается в двух случаях:
    1) либо i > j и элемент не был найден,
    2) либо i <= k <= j и A[k] = искомый элемент. }



Код

#!/usr/bin/perl

  if (!$ARGV[0])   {
    print 'no key';
    exit;    }

  open my $fi, '666.txt';

  sub filess {
    my $ss = int((@_[0] + @_[1]) / 2);
      return 0 if @_[0] == $ss or @_[1] == $ss;
    seek $fi, $ss, 0;
    <$fi>;
    my $line = <$fi>;

    my @h = split( /\t/, $line, 2 );
   if ($h[0] eq $ARGV[0]) {
    print $h[1];
    exit;
   }
    return filess(@_[0], $ss) if(($ARGV[0] cmp $h[0]) == -1);
    return filess($ss, @_[1]) if(($ARGV[0] cmp $h[0]) == 1);
  }

  filess(0, -s $fi);



Код

#!/usr/bin/perl

use File::SortedSeek ':all';

@{$hex->[0]} = 'D';

  open BIG, 'file.txt' or die $!;

$tell = alphabetic( *BIG, @{$hex->[0]} );
$line = <BIG>;

@{$hex->[1]} = split( /\t/, $line, 2 );

print @{$hex->[1]};


Код

#!/usr/bin/perl -w

# размер блока для чтения, чтобы не читать посимвольно
my $read_block_size = 256;

# функция для сдвига к границе записи
# принимает хэндл и направление движения
# направление = 0 - двигаемся вперед к началу следующей записи - вообще-то не используется smile.gif
# = 1 - назад - к началу текущей записи
sub rec_shift {
my( $file, $dir ) = @_;
my( $buf, $ofs );
# крутимся пока не дойдем
while( 1 ) {
# получаем текущее смещение
$ofs = tell( $file );
# в зависимости от направления
if( !$dir ) {
# направление вперед, аналогично считыванию записи,
# к тому же не используется в программе, коментировать лень
read( $file, $buf, $read_block_size );
my $o = index( $buf, "\x0a" );
if( $o >= 0 ) {
seek( $file, $ofs + $o + 1, 0 );
return;
} elsif( eof( $file ) ) {
return;
}
} else {
# к началу записи - назад
# смотрим на текущее смещение и сравниваем с размером блока который хотим считать
# ессно, выбираем меньшее
my $r = $ofs > $read_block_size ? $read_block_size : $ofs;
# смещаемся назад на размер блока
seek( $file, -$r, 1 );
# читаем блок
read( $file, $buf, $r );
# снова возвращаемся на начало блока, т.к. чтение сдвинуло на прежнюю точку
seek( $file, -$r, 1 );
# ищем разделитель (ессно, с конца блока, потому что идем назад)
my $o = rindex( $buf, "\x0a" );
if( $o >= 0 ) {
# нашли! смешаемся на начало записи и все smile.gif
seek( $file, $o + 1, 1 );
return;
} elsif( $r == $ofs ) {
# не нашли, но размер блока для чтения равен ранее смещению до конца текущего блока
# следовательно мы находимся в начале файла (а значит и какой-то записи)
# можно было не сдвигаться, но так, на всякий пожарный smile.gif
seek( $file, 0, 0 );
return;
}
}
}
}

# считывает запись от текущего положения и смещает к началу следующей
# АХТУНГ! функция преполагает, что мы находимся в начале записи
# принимает хэндл файла
sub rec_read {
my( $file ) = @_;
# 'это и будет наша запись
my $ln = '';
my $buf;
while( 1 ) {
# получаем текущее смещение
my $ofs = tell( $file );
# считываем блок
read( $file, $buf, $read_block_size );
# ищем в нем перевод стоки - разделитель записей
my $o = index( $buf, "\x0a" );
# если нашли, то
if( $o >= 0 ) {
# смещаемся к началу следующей записи
seek( $file, $ofs + $o + 1, 0 );
# добавляем кусок буфера от начала до конца (не включая разделитель)
$ln .= substr( $buf, 0, $o );
# разделяем строку по табуляции (разделитель ключа и значения) и возвращаем такой вот массивчик
return split( /\t/, $ln );
}
# если не нашли разделитель --> добавляем весь буфер и читаем следующую порцию, повторяя все снова, пока не найдем
$ln .= $buf;
}
}

# основная функция бинарного поиска
# принимает хэндл файла, ключ, начало и конец данных для поиска
sub filebinsearch {
my( $file, $fkey, $beg, $end ) = @_;
# если конец == началу, то данных уже нет, значит ключ не найден
return undef if $beg == $end;
# вычисляем середину наших данных
my $oc = int( ( $beg + $end ) / 2 ); # ( $beg + $end ) >> 1 -- 32bit :-(
# смещаемся к середине
seek( $file, $oc, 0 );
# сдвигаемся к НАЧАЛУ записи (могли попасть куда угодно) на которой стоим
rec_shift( $file, 1 );
# запоминаем смещение начала файла
$oc = tell( $file );
# считываем ценральную запись
my( $key, $value ) = rec_read( $file );
# если попали туда, куда надо - возвращаем значение
return $value if $key eq $fkey;
# сравниваем эталонный ключ с найденным
if( $key lt $fkey ) {
# найденный ключ меньше эталонного, значит первую половину
# можно отбросить и повторить поиск только для второй части
# которая начинается с конца ранее найденной и заканичвается там,
# где и был конец исходных данных
filebinsearch( $file, $fkey, tell( $file ), $end );
} else {
# найденный ключ больше искомого --> опускаем вторую половину
# ищем только в первой, кот. начинается с начала исходных
# данных и заканчивается в начале ранее найденной записи
filebinsearch( $file, $fkey, $beg, $oc );
}
}


# собственно функция задания, которую и надо вызывать
# принимает имя файла и ключ который ищем
sub findinfile {
my( $filename, $key ) = @_;
my $value = undef;
my $filesize = 0;

# а есть ли вообще такой файл?
return undef if !-f $filename;
# а можем ли мы его прочесть?
return undef if !-r $filename;
# а в нем хоть что-то есть? попутно сохраняем размер файла
return undef if !($filesize = -s $filename);
# открываем и проверяем получилось ли это
return undef if !open( $file, '<', $filename );
# вызываем рекурсивную функцию - основа бинарного поиска
return filebinsearch( $file, $key, 0, $filesize );
}

print findinfile( $ARGV[0], $ARGV[1] ) . "\n";



поиск по файлу в 20Гиг будет не более чем 2-3 сек. и не будут использоватся ресурсы....

Цитата(Zmiuko @ 27.2.2010,  10:02)


Но как быть с редактированием, тут сложнее, или возможно также делить кусками, что вполне реально и при нахождении строки заменять ее, а затем куски "склеивать" ?


чтобы добавить в конец, можно использовать не буферизированные Сишные  функции syswrite и sysread чтобы добавить в файл не открывая весь файл

Это сообщение отредактировал(а) gcc - 28.2.2010, 04:49
PM WWW ICQ Skype GTalk Jabber   Вверх
IZ@TOP
Дата 1.3.2010, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



gcc, это было круто, однако у человека задача сделать сие на PHP, а поскольку задача скорее всего учебная, то другой язык не подойдет.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Ипатьев
Дата 1.3.2010, 15:45 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Не, ну "упорядоченные-то и отсортированные" строки и на пхп любой дурак сделает.
Но проблема в том, кто эти строки упорядочивать будет...
PM MAIL   Вверх
gcc
Дата 1.3.2010, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



IZ@TOP, автор может легко переписать на php

я не нашел вариант на php, по этому написал такой вариант который я видел

вариант на php, я видел даже на этом форуме, но найти не смог...

просто мне сейчас такой алгоритм не нужен, если автору нужен, то он может же переписать из существующих скриптов?

Добавлено @ 18:15
Ипатьев, это скорее всего учебное задание. ну memcache придумали как раз чтобы минимизировать запросы к СУБД, чтобы она не жрала память, а чтобы можно было быстро найти по ключам закешированные данные и отдать их...

Это сообщение отредактировал(а) gcc - 1.3.2010, 18:38
PM WWW ICQ Skype GTalk Jabber   Вверх
Zmiuko
  Дата 3.3.2010, 17:07 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Цитата(IgorIV @  27.2.2010,  20:05 Найти цитируемый пост)
А это случайно не видеофайл?  


C видеофайлом намного проще, там можно использовать фреймы.

Цитата(IZ@TOP @  1.3.2010,  11:55 Найти цитируемый пост)
gcc, это было круто, однако у человека задача сделать сие на PHP, а поскольку задача скорее всего учебная, то другой язык не подойдет. 


Цитата(Ипатьев @  1.3.2010,  15:45 Найти цитируемый пост)
Не, ну "упорядоченные-то и отсортированные" строки и на пхп любой дурак сделает.
Но проблема в том, кто эти строки упорядочивать будет... 


Проблема не сколько в упорядоченных и отсортированных строках. Проблема в их количестве. 

Цитата(gcc @  1.3.2010,  18:12 Найти цитируемый пост)
IZ@TOP, автор может легко переписать на php


Благодарю. С чтением огромный файлов разобрался.

Но никак не могу разобраться с алгоритмом редактирования-изменения-удаления конкретной строки... 
Чтение файла можно изобразить как и в мускул - посредством простого деления и кеширования данных.
Но вот редактирование. Можно добавить в конец или начало - тут также понятно все, а вот чтобы распарсить файл весом в 2 гб, найти искомое, заменить и обратно сохранить - проще ответить что на php сие не возможно. Но подобный ответ заранее неприемлем.

Добавлено через 8 минут и 47 секунд
Посмотрел различные решения, но нигде, кроме как на иностранных источниках подробно не затронута данная проблема. Хотя заметим php-интерпретатору не первый год. Легче переложить все на плечи драйверу СУБД, нежели разобраться в реализации.

Что характерно, все пишут про проблему чтения файла весом в 2-300гб, но нигде не могут полноценно ответить на вопрос о его изменении.

Кроме того ответ: не надо подобные задание не давать - не решать... а что насчет PEAR или каких-либо классов, что насчет постоянного поиска подобных скриптов - gif-анимация на php, округление углов png-альфа канал, различные хитрости и прочее? Почти каждый имел дело с поиском какого-либо решения. И я полагаю каждый php-программист получал в ответ: на php это нереализуемо! Что на самом деле опровергалось простым анализом и использованием стандартных методик, правда, года через два.

PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 3.3.2010, 17:19 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



что значит невозможно?
возможно на любом языке программирования. 
это стандартная операция, которая производится на любом компьютере миллионы раз в день

Цитата(Zmiuko @  3.3.2010,  17:07 Найти цитируемый пост)
Проблема не сколько в упорядоченных и отсортированных строках. Проблема в их количестве. 

Цацку-то снимите, про крутого программиста, не позорьтесь.
PM MAIL   Вверх
Zmiuko
  Дата 3.3.2010, 17:24 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Как бы то не было: позицию огромного файла можно сравнить с позицией тяжелой и массивной sql базы данных. Думаю, при постоянном обновлении и огромном количестве информации работа с тем и другим приобретает характер некой сравнительной одинаковости - то есть что так, что там - позиция что "а не надо подобное в подобном хранить да в таком количестве и все будет - окей" уже используется не столько в адрес использования файла, сколько уже и в адрес СУБД в целом.

На данный момент это у меня учебное задание: реализовать на php сохранение-изменение-удаление строк/строки  в обычный файл, количество строк в файле должно быть более 100 тысяч при редактировании (использовать стандартные функции)..

Пока противопоставить нечего.

Добавлено через 3 минуты и 53 секунды
Цитата(Ипатьев @  3.3.2010,  17:19 Найти цитируемый пост)
Цацку-то снимите, про крутого программиста, не позорьтесь. 


Простите, не понял. К чему сказанное? Ежели оскорбление - смысла не вижу. Если про подпись - обновите страницу. В любом случае, я бы про "по3орность" не заикался. На всем форуме мало кто решит данную проблему! И вообще, любезный, а вы мои проекты видели? 

Ну не могу я самостоятельно решить как мне файл большой отредактировать. Ну и что? Это для php программиста позор? Это смертельно? ))

Извиняюсь, что ушел от темы.

Добавлено через 7 минут и 35 секунд
Цитата(Ипатьев @  3.3.2010,  17:19 Найти цитируемый пост)
что значит невозможно?
возможно на любом языке программирования. 
это стандартная операция, которая производится на любом компьютере миллионы раз в день


Пардон, так я как раз за этим. Как мне на php отредактировать-изменить или удалить конкретную строку в файле где их мильон? 

Вопрос не про то: подскажите мне функции file() , fopen(), explode(). 

Вы меня не совсем поняли.

Вопрос как использовать эти функции по отношению к обычному файлу где строки, а к огромному файлу, где их аж на 2 гб, да еще так чтобы php и апач выдержали бы, да еще чтобы ХОТЯ Б за 20 секунд. Вот о чем вопрос-то.
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 3.3.2010, 17:40 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Для программиста, у которого висит во все пузо бляха "я - крутой", позор - писать вот эти слова:
Цитата(Zmiuko @  3.3.2010,  17:07 Найти цитируемый пост)
Проблема не сколько в упорядоченных и отсортированных строках. Проблема в их количестве. 

а проекты мне смотреть неинтересно.
Цитата(Zmiuko @  3.3.2010,  17:07 Найти цитируемый пост)
Что характерно, все пишут про проблему чтения файла весом в 2-300гб, но нигде не могут полноценно ответить на вопрос о его изменении.

ну разумеется. потому что никто, будучи в здравом уме и твердой памяти, не будет этим заниматься вручную, если все за него сделает база данных. поэтому никто и не пишет. не "не могут", а "никому это нафиг не нужно". 
Цитата(Zmiuko @  3.3.2010,  17:07 Найти цитируемый пост)
Кроме того ответ: не надо подобные задание не давать - не решать... а что насчет PEAR или каких-либо классов, что насчет постоянного поиска подобных скриптов - gif-анимация на php, округление углов png-альфа канал, различные хитрости и прочее? Почти каждый имел дело с поиском какого-либо решения. 

ой, только не надо вот этого кликушества.
не надо путать сложные задачи с дурацкими.

Цитата(Zmiuko @  3.3.2010,  17:24 Найти цитируемый пост)
На данный момент это у меня учебное задание: реализовать на php сохранение-изменение-удаление строк/строки  в обычный файл, 

Если студенту дается учебное задание написать базу данных, то сначала ему обычно дают теоретические знания об архитектуре баз данных.
Если он, конечно, эти теоретические занятия не прогуливал.

Добавлено @ 17:50
Ну вот опять. 
Налицо все признаки синдрома, который называется нехорошим словом:
- нигде не могут полноценно ответить
- вы меня не совсем поняли
- а вы мои проекты видели? 

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

Давайте, что ли, посмотрим ваши проекты, ели вам там хочется.
положите на какой-нибудь из них в корень файлик vingrad.htm со словом "Позор неверующим".




Это сообщение отредактировал(а) Ипатьев - 3.3.2010, 17:51
PM MAIL   Вверх
Zmiuko
  Дата 3.3.2010, 17:53 (ссылка)   | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Уважаемый Ипатьев, мне бы не хотелось участвовать в Вашем офтопе и набивании постов. Но отчего же эта идея дурацкая? Вы очевидно слишком умны, так уж дабы не опускаться до непримирения, то давайте оставим Вашу любовь к правильности ведения архитектуры баз данных. Не стоит кричать! Базы данных, СУБД, очень хорошо, никто их тут не противится, никто их тем более не отрицает. Вопрос конкретный и не про СУБД. Почему тыкаете носом в сторону них, мне не понятно. Топик не касался SQL ни коим образом. У Вас предвзятое отношение?

Простите за флуд, но у человека какие-то иллюзии и неприязнь. Это не правильно и для меня не приятно.
 smile

Добавлено через 4 минуты и 17 секунд
Цитата(Ипатьев @  3.3.2010,  17:40 Найти цитируемый пост)
Давайте, что ли, посмотрим ваши проекты, ели вам там хочется.
положите на какой-нибудь из них в корень файлик vingrad.htm со словом "Позор неверующим".


Уважаемый, Вам делать нечего?  smile

Добавлено через 8 минут и 36 секунд
Цитата(Ипатьев @  3.3.2010,  17:40 Найти цитируемый пост)
Виноваты все вокруг. Писатели в интернете, собеседники на форуме. Кругом одни посредственности. Которым не дано оценить величие духа истинного гения и грандиозность стоящих перед ним задач.


Вам бы сходить на кухню, чай заварить горячий с малиной и лимоном - успокаивает. И не флудить всего что мимо темы. Чем-то Вас обидел, уж извините, не хотел. А оскорблять не стоит. 

Что касаеться Вашей претензии - то пересмотрите не архитектуру СУБД, а архитектуру этого форума... Форум->Тема->Вопрос->Ответы, и более не путайте топики, и тем более на хамите, если у Вас просто плохое настроение.

Прошу прощение у модераторов за офтоп - человек не в духе.

PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 3.3.2010, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Боже мой ну откуда в голову может придти идея о "набивании постов"?
Неужели это действительно такие важные цифры - количество постов, репутация?
Вы правда считаете набивание постов целью всякого, кто сюда пишет? А вы не пробовали читать текст  этих постов? Смысл того, что написано?
Нет, я понимаю, что с осмысленными аргументами трудно спорить, когда приходится изворачиваться, расказывая сказки про учебные задания. Но набивание-то здесь при чем?

Цитата(Zmiuko @  3.3.2010,  17:53 Найти цитируемый пост)
опик не касался SQL ни коим образом.

А кто говорил слово SQL?

послушайте, скажите мне название организации, в которой дают такие учебные занания тем, кто не понимает разницы между словами "SQL" и "база данных". Мы пойдем туда вместе и взорвем к чертовой бабушке это никчемное заведение.
PM MAIL   Вверх
Zmiuko
  Дата 3.3.2010, 18:04 (ссылка)  | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Цитата(Ипатьев @  3.3.2010,  17:40 Найти цитируемый пост)
Которым не дано оценить величие духа истинного гения и грандиозность стоящих перед ним задач.

 smile

Добавлено через 3 минуты и 13 секунд
Ипатьев, Вы попросите администрацию данного форума, может для Вас сделают исключение и поставят чат?.. Что-Почему-Зачем? не слишком ли много? "Гений", "Я- Крутой"? Это Вы вообще о чем? Уже нельзя зайти на форум и спросить у людей помощи в алгоритме?

Хочу сказать, Вы слишком чем-то озабочены, не могу только понять чем же.
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 3.3.2010, 18:12 (ссылка) |   (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Я озабочен только одним.
Осмысленностью вопроса, в котором у меня просят помощи. 
мне кажется, что для человека, просящего других об услуге, не должно являться такой трудностью честно и подробно рассказать о решаемой задаче и событиях, которые привели к именно такой постановке. 
Не бывает задач в вакууме. Даже учебных. 
плюс к тому, я не имею привычки, как многие другие посетители этого форума, выдумывать за автора правдоподобные объяяснения. А предпочитаю, чтобы автор хотя бы смог их придумать без подсказки.

А когда начинаются басни, то я озабочен тем, чтобы указать автору на их несостоятельность.
Все очень просто и логично.
PM MAIL   Вверх
Zmiuko
Дата 3.3.2010, 18:13 (ссылка)  | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Цитата(Ипатьев @  3.3.2010,  18:04 Найти цитируемый пост)
послушайте, скажите мне название организации, в которой дают такие учебные занания тем, кто не понимает разницы между словами "SQL" и "база данных". Мы пойдем туда вместе и взорвем к чертовой бабушке это никчемное заведение. 


Вы молодец. Редко кто оживлен своей принципиальностью и способен на какой-либо, пускай бессмысленный спор. Оставайтесь идейным - в наше время очень мало таких людей.  smile 
PM MAIL WWW ICQ Skype Jabber   Вверх
Zmiuko
Дата 3.3.2010, 19:46 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Цитата(Ипатьев @  3.3.2010,  18:12 Найти цитируемый пост)
Я озабочен только одним.
Осмысленностью вопроса, в котором у меня просят помощи. 
мне кажется, что для человека, просящего других об услуге, не должно являться такой трудностью честно и подробно рассказать о решаемой задаче и событиях, которые привели к именно такой постановке. 
Не бывает задач в вакууме. Даже учебных. 
плюс к тому, я не имею привычки, как многие другие посетители этого форума, выдумывать за автора правдоподобные объяяснения. А предпочитаю, чтобы автор хотя бы смог их придумать без подсказки.

А когда начинаются басни, то я озабочен тем, чтобы указать автору на их несостоятельность.
Все очень просто и логично. 


Басни? Я не скрываю, что это у меня учебное задание. Даже вопрос возникает: коим образом может повлиять на решение задачи предпосылки ее возникновения; пускай даже если я с потолка взял вопрос и пытаюсь на него найти решение. Вы никогда не занимались самопознанием? ))) прескорбно. Можно подумать, что все ответы на вопросы, описанные реализации у программистов, а тем боле у php-программистов воплощаются в жизнь.

К тому же, исходя из старых постов и топов, не касающихся данной темы форума ЛИЧНО У ВАС помощи не просил, боле того: хотел бы, что бы Вы оставляли мои топики в покое. Хамски? Да хамски: не более чем Вы пытаетесь навязать свое мнение. Проследите свои вопросы-ответы по форуму и надеюсь найдете первопричину данной проблематики. Слишком много умных слов и воды, причем в основном попытка навязательства "А вам это ненужно, поскольку не нужно мне".
Да, рейтинг и репутация играют не последнюю роль и не только на данном форуме. Думаете нет людей умнее Вас? Я шесть лет занимаюсь только одним php. Мне не надо писать "вы дурак, поскольку себе то и то напридумывали": я далеко в программировании "не мальчик", более того НЕЭТИЧНО так поступать - тем боле что мы с Вами не знакомые люди. Вы все себе позволяете?

Насчет басней: да! Я хочу написать Вконтакте на текстах! Более того взять во внимание предложенный алгоритм и продовать его тыщ за писят.   Вы довольны?

Я уже получил 1 предупреждение на этом форуме, когда хотел указать на правила поведения при ведении постов, указать человеку, что не нужно хамить. Очень грустно, что это не берется во внимание и закрываются глаза на уважение и этику друг к другу.
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 3.3.2010, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37




Модератор: Сообщение скрыто.

PM MAIL   Вверх
smartov
Дата 3.3.2010, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259




 ! 
smartov
Ипатьев, прошу не флеймить не по делу.


Добавлено через 1 минуту и 46 секунд
Zmiuko, на stackoverflow подсказывают что если уж вы зажаты в рамки поставленной задачи, то можно воспользоваться вызовом стандартных UNIX утилит типа sed.
PM MAIL   Вверх
Ипатьев
Дата 3.3.2010, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



smartov, я не согласен с тем, что это "флейм" и "не по делу".
Я подробно описал в скрытом сообщении - почему.

У любой задачи может быть множество решений. Выбрать нужное можно только основываясь на анализе исходных данных.
Решать же такие заведомо бессмысленные задачи "в лоб" - вот это, как раз, и будет "не по делу".

Тут же дыры лезут изо всех щелей - какое предложение ни возьми.
что, например, должна означать фраза
Цитата(Zmiuko @  3.3.2010,  17:24 Найти цитируемый пост)
чтобы php и апач выдержали бы, да еще чтобы ХОТЯ Б за 20 секунд.

?
что должны выдержать апач и пхп? При нужных параметрах процесс будет висеть до завершения перезаписи. Но какой в этом смысл?

И так с каждым объяснением автора. 
Вместо того. чтобы перебирать их по одному, я сразу указываю на корень проблемы - негодно сформулированнюу задачу.

Добавлено @ 20:44
Приведенное вами решение не удовлетворяет поставленным условиям - делать обязательно на РНР и размер файла по приведенной ссылке гораздо скромнее - в 1000 раз.

Это сообщение отредактировал(а) Ипатьев - 3.3.2010, 20:50
PM MAIL   Вверх
Zmiuko
  Дата 4.3.2010, 06:54 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Цитата(smartov @  3.3.2010,  20:27 Найти цитируемый пост)
Zmiuko, на stackoverflow подсказывают что если уж вы зажаты в рамки поставленной задачи, то можно воспользоваться вызовом стандартных UNIX утилит типа sed. 


Благодарю, очень доброе решение. Правда иногда не вполне осуществимо, но это малое что из реально продуманных ответов на поставленую задачу.

Цитата(Ипатьев @  3.3.2010,  20:42 Найти цитируемый пост)
что должны выдержать апач и пхп?

Любой программист, даже далеко не веб, должен иметь понятие не столько об используемый командах в интерпретаторе (поскольку справку всегда можно прочесть), сколько в известных ошибках выдаваемыми используемым продуктом. Не думаю, что Вы не поняли о каких именно ошибках и проблемах шла речь. Если действительно в недоумении, то создайте файл в миллион строк и попробуйте вывести постранично строки (пять строк на страницу к примеру), дабы понять какая ошибка выведет сам апач, то думаю вам дополнительно необходимо к каждой строке применить строковые функции, либо к каждой, либо как к массиву. В первом случае себя покажет интерпретатор, а во втором сам апач. Думаю, с постановкой данной задачи справитесь.
PM MAIL WWW ICQ Skype Jabber   Вверх
gcc
Дата 4.3.2010, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



Zmiuko, для записи  http://ua.php.net/manual/en/function.fwrite.php  

?? 

Это сообщение отредактировал(а) gcc - 4.3.2010, 08:36
PM WWW ICQ Skype GTalk Jabber   Вверх
awers
Дата 4.3.2010, 08:10 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: 21
Всего: 31



Цитата(Zmiuko @  4.3.2010,  07:54 Найти цитируемый пост)
Любой программист, даже далеко не веб, должен иметь понятие не столько об используемый командах в интерпретаторе (поскольку справку всегда можно прочесть), сколько в известных ошибках выдаваемыми используемым продуктом. Не думаю, что Вы не поняли о каких именно ошибках и проблемах шла речь. Если действительно в недоумении, то создайте файл в миллион строк и попробуйте вывести постранично строки (пять строк на страницу к примеру), дабы понять какая ошибка выведет сам апач, то думаю вам дополнительно необходимо к каждой строке применить строковые функции, либо к каждой, либо как к массиву. В первом случае себя покажет интерпретатор, а во втором сам апач. Думаю, с постановкой данной задачи справитесь. 

На мой взгляд такая задача - бред в кубе. Я сделаю insert into .... а потом select * where ...  а потом ещё что нить и это займёт ~ 0.0002 секунды. Что за изобретения - мне непонятно.
PM MAIL WWW ICQ Skype   Вверх
Zmiuko
Дата 4.3.2010, 10:01 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Почему бред? Нормальный вопрос, пускай он и не используется.  При чем тут " insert into .... а потом select * where" ? Мы же про файл говорим.

Цитата(gcc @  4.3.2010,  08:00 Найти цитируемый пост)
Zmiuko, для записи  http://ua.php.net/manual/en/function.fwrite.php  


Ну да, в курсе smile

PM MAIL WWW ICQ Skype Jabber   Вверх
awers
Дата 4.3.2010, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: 21
Всего: 31



Zmiuko, один раз распарсить в бд и юзать на здоровье.
PM MAIL WWW ICQ Skype   Вверх
sTa1kEr
Дата 4.3.2010, 15:24 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(smartov @  3.3.2010,  21:27 Найти цитируемый пост)
Zmiuko, на stackoverflow подсказывают что если уж вы зажаты в рамки поставленной задачи, то можно воспользоваться вызовом стандартных UNIX утилит типа sed. 

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

И тот же посоветованный sed здесь не исключение. Для редактирования файла он все так же читает его целиком поблочно и так же  целиком записывает в новый временный файл. 

Впрочем, что бы в этом убедится самим и наглядно увидеть алгоритм работы sed'а можно провести небольшой тест:

Создадим текстовый файл с 1 000 000 строк
Код

$ for i in {1..1000000}; do echo $i >> 1.txt; done


И при помощи утилиты strace посмотрим как sed будет его редактировать:
Код

$ strace sed -ri 's/476345/edited line/' 1.txt >strace.log 2>&1


Теперь смотрим, что у нас получилось :
Код

...
open("1.txt", O_RDONLY)                 = 3 // Открыли редактируемый файл для чтения
open("./sedBGgCPj", O_RDWR|O_CREAT|O_EXCL, 0600) = 4 // Открыли временный файл для записи
read(3, "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14"..., 4096) = 4096 // Прочитали первый блок, 4096 байт
write(4, "1\n", 2)                      = 2 // Записали во временный файл первую строку
write(4, "2\n", 2)                      = 2 // Записали во временный файл вторую строку
write(4, "3\n", 2)                      = 2 // Записали во временный файл третью строку
...
write(4, "1040\n", 5)                   = 5 // И так до тех пор, пока не кончились данные из первого блока 
read(3, "1\n1042\n1043\n1044\n1045\n1046\n1047\n"..., 4096) = 4096 // Затем прочитали следующий блок
write(4, "1041\n", 5)                   = 5 // И понеслась...
write(4, "1042\n", 5)                   = 5
write(4, "1043\n", 5)                   = 5
...
write(4, "476343\n", 7)                 = 7
write(4, "476344\n", 7)                 = 7
write(4, "edited line\n", 14)         = 14 // Пока наконец в одном из блоков не нашли и не заменили искомую строку
write(4, "476346\n", 7)                 = 7 // Продолжаем читать блоки и писать их во временный файл...
write(4, "476347\n", 7)                 = 7
...
write(4, "999998\n", 7)                 = 7
write(4, "999999\n", 7)                 = 7
write(4, "1000000\n", 8)                = 8
read(3, "", 4096)                       = 0 // Пока данные в исходном файле наконец не закончатся
close(3)                                = 0
close(4)                                = 0
rename("./sedBGgCPj", "#1.txt")          = 0 // А затем просто замещаем оригинальный файл временным
// finita la comedia


Вот и вся магия системных утилит. 
Zmiuko, надеюсь на этом примере вам ясен алгоритм редактирования любого файла в общем случае? Если нет, то попробуйте к методам приведенным выше добавить в начало букву f.

И еще стоит заметить, что существует частный случай, когда все строки имеют фиксированную длину (т.е. когда длина любой строки остается неизменной). В этом случае вам не придется читать и перезаписывать весь файл. Алгоритмы, как это сделать, хорошо описаны в документации к PHP (ссылки вам привел Fortop во втором посте)

Это сообщение отредактировал(а) sTa1kEr - 4.3.2010, 15:49
PM MAIL   Вверх
IgorIV
Дата 4.3.2010, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



Цитата(Zmiuko @  3.3.2010,  17:07 Найти цитируемый пост)
gif-анимация на php, округление углов

Я хотел вчера спросить, но постеснялся smile
Не подскажешь как это сделать на PHP? 
PM MAIL   Вверх
Zmiuko
  Дата 5.3.2010, 09:16 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



sTa1kEr, благодарю, вы очень популярно и качественно объяснили суть алгоритма. Одновременно и показали и рассказали. Благодарю. очевидно я был прав, что при редактированнии большого файла, необходимо производить изменение сегментарно и формировать кеш перезаписи, благодарю.

IgorIV, gif-анимация довольно сложна, прошу прощения что не могу уделить вам по ней времени, а вот округление углов - скрипт довольно прост:

Код

$filename = '...'; /* Замест ... пишем путь до *gif-jpg-png */
$radius = 10;

/**
 * Чем выше rate, тем лучше качество сглаживания и больше время обработки и
 * потребление памяти.
 *  
 * Оптимальный rate подбирается в зависимости от радиуса.
 */ 
$rate = 50;

$img = imagecreatefromstring(file_get__contents($filename));
imagealphablending($img, false);
imagesavealpha($img, true);

$width = imagesx($img);
$height = imagesy($img);

$rs_radius = $radius * $rate;
$rs_size = $rs_radius * 2;

$corner = imagecreatetruecolor($rs_size, $rs_size);
imagealphablending($corner, false);

$trans = imagecolorallocatealpha($corner, 255, 255, 255, 127);
imagefill($corner, 0, 0, $trans);

$positions = array(
    array(0, 0, 0, 0),
    array($rs_radius, 0, $width - $radius, 0),
    array($rs_radius, $rs_radius, $width - $radius, $height - $radius),
    array(0, $rs_radius, 0, $height - $radius),
);

foreach ($positions as $pos) {
    imagecopyresampled($corner, $img, $pos[0], $pos[1], $pos[2], $pos[3], $rs_radius, $rs_radius, $radius, $radius);
}

$lx = $ly = 0;
$i = -$rs_radius;
$y2 = -$i;
$r_2 = $rs_radius * $rs_radius;

for (; $i <= $y2; $i++) {

    $y = $i;
    $x = sqrt($r_2 - $y * $y);

    $y += $rs_radius;
    $x += $rs_radius;

    imageline($corner, $x, $y, $rs_size, $y, $trans);
    imageline($corner, 0, $y, $rs_size - $x, $y, $trans);

    $lx = $x;
    $ly = $y;
}

foreach ($positions as $i => $pos) {
    imagecopyresampled($img, $corner, $pos[2], $pos[3], $pos[0], $pos[1], $radius, $radius, $rs_radius, $rs_radius);
}

#header('Content-Type: image/png');
#imagepng($img); /* Вывод в браузер */
imagepng($img, "new_file_name.png"); /* Сохранение в файл  */


Надеюсь, что модератор не рассердиться.
PM MAIL WWW ICQ Skype Jabber   Вверх
smartov
Дата 5.3.2010, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Цитата(sTa1kEr @  4.3.2010,  15:24 Найти цитируемый пост)
Это очень вредные подсказки, которые создают у новичков иллюзию, что системные утилиты используют какие-то магические методы. В то время, когда все эти утилиты используют все те-же базовые алгоритмы. 

Откровенно говоря я тоже ожидал от СЕДа более интеллектуального поведения вроде перезаписывания только изменившихся блоков файла.
PM MAIL   Вверх
gcc
Дата 5.3.2010, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



Zmiuko, в условии задания говорится что данные строки отсортированные или упорядоченные? если нет, то задание не реально простое, или не реально сложное (реляционная алгебра и т.д. smile )...

вы говорите у вас файл более 1 Гига, но например, если таблица или база будет 50-150Гб, разве MySQL будет весь файл перезаписывать для того чтобы вставить, обновить или удалить?


Это сообщение отредактировал(а) gcc - 5.3.2010, 10:58
PM WWW ICQ Skype GTalk Jabber   Вверх
Ипатьев
Дата 5.3.2010, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



будет, конечно.
только не сразу.
PM MAIL   Вверх
Fortop
Дата 5.3.2010, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(Zmiuko @  3.3.2010,  16:24 Найти цитируемый пост)
 На всем форуме мало кто решит данную проблему!

Омг, а разве это вообще проблема?

Цитата(smartov @  5.3.2010,  08:33 Найти цитируемый пост)
Откровенно говоря я тоже ожидал от СЕДа более интеллектуального поведения вроде перезаписывания только изменившихся блоков файла. 

И каким боком это должно быть реализовано? В случае если замещаемый блок неравноразмерен с новым - ничего не получится.

Zmiuko, рекомендую перечитать вот это
Цитата(Fortop @  27.2.2010,  06:57 Найти цитируемый пост)
А вот изменить файл без полной перезаписи будет много сложнее. (и это зависит от того используются ли равноразмерные строки, или же переменной длины)
Для редактирования равноразмерных строк можно использовать
http://php.net/rewind
http://php.net/fseek
http://php.net/fwrite

Тут предложены два единственно возможных варианта. Произвольный файл будет требовать полной перезаписи. Обойти это можно только лишь структурировав файл - например, ограничив длину строки 1000 символами ровно (даже если в ней лежит ровно 1на буква она будет занимать строку в 1000 байт). Большинство СУБД используют 2й вариант, естественно в более сложной форме.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
LeoK
Дата 5.3.2010, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 14.12.2007
Где: Moscow

Репутация: нет
Всего: нет



а шелл бы был здесь как нельзя кстати smile
PM MAIL   Вверх
Ипатьев
Дата 5.3.2010, 15:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Fortop, с появлением полей типа TEXT и varchar второй вариант уже не актуален smile
Выравнивание ведь не единственное средство обеспечения произвольного доступа. хотя и наиболее доступное

Добавлено @ 15:29
LeoK, слово "здесь" к данной ситуации неприменимо.
Поскольку четкое позиционирование отсутствует. так что задача может быть как "здесь", так и "где-то там" или вообще "нигде".
Ближе всего к описанной задаче подходит "изобрести на коленке базу данных", о чем я уже давно и говорил, и к чему постепенно движется обсуждение. но в этом случае шелл, конечно, нужен, но гибче будет, все-таки, руками.

Это сообщение отредактировал(а) Ипатьев - 5.3.2010, 15:31
PM MAIL   Вверх
Fortop
Дата 5.3.2010, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(Ипатьев @  5.3.2010,  14:26 Найти цитируемый пост)
С появлением полей типа TEXT и varchar второй вариант уже не актуален

Разве? 

Все сделано несколько более интеллектуальным, метаинформация хранится для записей(строк) поэтому они могут быть переменной длины.
Но тем не менее по-прежнему выделяются страницы/блоки (фиксированного размера) для хранения записей.
Во многих серверах блобы(поля типа TEXT) вообще хранятся в отдельных областях.

Но это именно структурирование хранимой информации.



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Zmiuko
  Дата 5.3.2010, 15:37 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Я так же как и Вы склоняюсь к тому, что данное задание практически не реализовать. Черт ногу сломит. Выход можно найти, наверное еще, если использовать не целостный файл под все строки, а каждую строку складировать в файл. И иметь файл единый для атрибутов строк, допустим id<>имя файла строки но вот что если его также раздует, а его и раздует. Тоже не выход.
Полагаю необходимо находить какой-то иной алгоритм, допустим файл создается до определенного размера, затем после его заполнения создается второй, третий и так далее. но скрипт редактирования подобного хлама, будет неимоверно сложен и излишне, я бы сказал, негибок. Хотя это один из выходов.
PM MAIL WWW ICQ Skype Jabber   Вверх
Fortop
Дата 5.3.2010, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Zmiuko, 
еще раз...

Прежде чем решать задачу, нужно ее понять. Если задача редактировать большой файл, это один вопрос (но резать его на 1000 маленьких - неполучится).
Если задача создать СУБД - то это совсем другой вопрос.

Поэтому надо не выдумывать, а взять и посмотреть в тетрадь с заданием, если конечно, все что тут говорилось про учебность не полное вранье.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Zmiuko
  Дата 5.3.2010, 15:42 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Допустим надо будет отредактировать строку. Получается мы пробегаем по файлам - ее находим. Тут все понятно.  Редактирование тоже понятно. Ну а вот удаление строки в середине - ставит меня в тупик. Это я про то, что если создавать не один большой файл, а множество с одинаковыми размерами - то есть не с одинаковыми, а записанными до указанного размера, естественно будут они отличаться и по размеру и по количеству строк. Получается - находим тот файл где строка, удаляем ее из него - и опля... надо переворотить всю базу - в каждом файле произвести смещение на -1 до указанного файла, в котором удалили строку. И опять тупик - если файлов, к примеру тысяча.
PM MAIL WWW ICQ Skype Jabber   Вверх
Fortop
Дата 5.3.2010, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(Fortop @  5.3.2010,  14:42 Найти цитируемый пост)
Прежде чем решать задачу, нужно ее понять.




--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Zmiuko
  Дата 5.3.2010, 15:47 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Цитата(Fortop @  5.3.2010,  15:42 Найти цитируемый пост)
Zmiuko, 
еще раз...

Прежде чем решать задачу, нужно ее понять. Если задача редактировать большой файл, это один вопрос (но резать его на 1000 маленьких - неполучится).
Если задача создать СУБД - то это совсем другой вопрос.

Поэтому надо не выдумывать, а взять и посмотреть в тетрадь с заданием, если конечно, все что тут говорилось про учебность не полное вранье. 


Я оговаривал суть задания. Необходимо разрешить чтение-удаление-редактирования строк или строки в файле большого размера (более ста тысяч объемных строк, файл более 300мб-1гб). В дебри лезу, что пытаюсь, может быть построить некоторую архитектуру разбиения файла и дальнейшей работы с ним.  Выхода другого не вижу.

Если Вам интересно, то такие задания дают в НГТУ - Новосибирском гос.техническом университете.  smile

Добавлено через 1 минуту и 16 секунд
Простите, решить необходимо на php используя стандартные функции. Естественно без применения СУБД. Так бы я давно файл засунул в мускул да работал там.

Добавлено через 1 минуту и 27 секунд
И вам бы голову не морочил smile

Добавлено через 3 минуты и 9 секунд
Цитата(Fortop @  5.3.2010,  15:46 Найти цитируемый пост)
Прежде чем решать задачу, нужно ее понять.


Увы, я не имею представления как уже ее понимать и выкручиваться из данной ситуации.  smile

Добавлено через 5 минут и 7 секунд
С базами данных на текстах, работал, знаю прекрасно какое это гомно и отсутствие всякой гибкости, лишь головная боль. Но вот дали мне такое задание. Что уж теперь.
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 5.3.2010, 15:53 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Fortop, тут вся хитрость в том, что на самом-то деле в СУБД поиск по номеру строки мало того что почти не бывает нужен, а еще и идеологически вреден. Отсюда у нас растут другие средства. Побочным эффектом применения которых является отсутствие необходимости вырванивать файл. ;)
PM MAIL   Вверх
Fortop
Дата 5.3.2010, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(Zmiuko @  5.3.2010,  14:47 Найти цитируемый пост)
Увы, я не имею представления как уже ее понимать

Мда. А подойти к преподавателю сложно?
Взять и уточнить, какой из 2х вариантов реализовывать.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Zmiuko
  Дата 5.3.2010, 15:57 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



А вот еще мысль пришла, читать файл, как предложено было ранее в своеобразный temp, а удаление-редактирование проводить посредством кеширования запросов. То есть удалили-отредактировали строку - ничего с фалом не делаем, а просто создаем новый, где указываем что удалили либо как отредактировали. Далее просто читаем файл для вывода заного, а в цикле чтения открываем второй файл и просто заменяем визуально все проводимые изменения. Выход?

Добавлено через 40 секунд
Цитата(Fortop @  5.3.2010,  15:54 Найти цитируемый пост)
Мда. А подойти к преподавателю сложно?
Взять и уточнить, какой из 2х вариантов реализовывать. 


Там ответ простой: у Вас есть голова? Думайте!..
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 5.3.2010, 15:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



ого, сколько уже успели понаписать.
однако, автор уже ближе к тому, чтобы изобрести эти самые средства smile 
но при этом он уже противоречит изначальной постановке задачи. у нас уже не "файл", а "массив данных" без строго определенной формы - если говорить ормальным языком. 
Вот к чему приводит скрытность, граничащая с издевательством - сначала долго рассказывать про файл, зсаставлять людей тратить время на составление и отладку примеров - а потом вдруг сказать, что файл большой и не нужен.
И даже после этого точный текст задания все равно остается засекречен
PM MAIL   Вверх
Fortop
Дата 5.3.2010, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Ипатьев, ? Причем тут поиск записей?
Я все же пока еще верю, что ТС решает задачу именно "редактирования" файла, а не написания собственной СУБД.

Добавлено через 49 секунд
Цитата(Zmiuko @  5.3.2010,  14:57 Найти цитируемый пост)
Там ответ простой: у Вас есть голова? Думайте!.. 

Тогда выбираешь первый понравившийся и реализуешь его.
В чем сложность?


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Zmiuko
  Дата 5.3.2010, 16:03 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Цитата(Ипатьев @  5.3.2010,  15:59 Найти цитируемый пост)
ого, сколько уже успели понаписать.
однако, автор уже ближе к тому, чтобы изобрести эти самые средства  
но при этом он уже противоречит изначальной постановке задачи. у нас уже не "файл", а "массив данных" без строго определенной формы - если говорить ормальным языком. 
Вот к чему приводит скрытность, граничащая с издевательством - сначала долго рассказывать про файл, зсаставлять людей тратить время на составление и отладку примеров - а потом вдруг сказать, что файл большой и не нужен.
И даже после этого точный текст задания все равно остается засекречен 


Стоп! Стоп! Не ерничать! никто вам не чего не засекречивал. Я имел ввиду заранее делить этот файл, дальше с кусками работать!

Добавлено через 47 секунд
Нужна была бы СУБД, я бы уж выход нашел... TXTSQL, к примеру взять во внимание.

Добавлено через 8 минут и 1 секунду
Цитата(Fortop @  5.3.2010,  16:01 Найти цитируемый пост)
В чем сложность? 


да думал, есть какие-то оптимальные решения.. а все достаточно просто, делить да складывать обратно... Для себя ответ нашел в нерентабельности редактирования большущего файла на php - стоит осуществлять посредством модулей и сторонних процессов. Сделать-то конечно сделаю, вариантов уже описано множество, благодарю Вас за Ваше терпение smile

Ипатьев и тебя благодарю, хоть ты сворливый и вредный, позже все-таки персонально для тебя создам тему о создании собственной СУБД!  smile

Добавлено через 10 минут и 24 секунды
А всеж вы правы в чем-то. Если производить дележку файла - то далее вся работа с ним похожа на работу СУБД. Вот только складывать обратно потом надо. Хотя можно просто циклом "подбирать куски".
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 5.3.2010, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Fortop, ну, мы ушли немного в сторону, к архитектуре БД.
О ней я и писал, о том, что вариант 2 не так уж и нужен в современных СУБД.
PM MAIL   Вверх
Zmiuko
Дата 5.3.2010, 16:19 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Что касается работы огромного файла, кстати, то сталкивался с проблемой работы с *.xls - php наотрез отказывался обрабатывать 9 мегабайтный файл.

Добавлено через 1 минуту и 16 секунд
И задание было схожее - произвести по нему поиск и выдать результат в виде *.xml . Ну как сами понимаете - интернет магазин.

Добавлено через 4 минуты и 45 секунд
Так вот проблема была в том, что содержимое *xls по-идее надо было в SQL-базу загрузить. Но Ваш покорный слуга делал шиворот-на-выворот, "на лету" обрабатывал *.xls в *.xml-вариант, а уж потом складывал его в базу. Ну и php, наотрез отказывался до конца обрабатывать этот *.xls .
PM MAIL WWW ICQ Skype Jabber   Вверх
Fortop
Дата 5.3.2010, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Ипатьев,
Чтобы не было недоразумений -  вариант 2 это не ограничение длины записи, а структурирование информации, в том числе и при помощи дополнительной метаинформации (индексы, страницы, ссылки и т.д.)
Ограничение длины строки - это всего лишь палиатив предложенный в данном конкретном случае для ТС.

Цитата(Zmiuko @  5.3.2010,  15:03 Найти цитируемый пост)
Если производить дележку файла - то далее вся работа с ним похожа на работу СУБД. Вот только складывать обратно потом надо

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

Если в учебном задании написано "редактировать файл" то придется работать именно с одним файлом. Все редактирование которого будет сводиться к построчной перезаписи в новый файл.
Или в случае строк фиксированной длины - перезаписи одной единственной строки в самом файле при помощи функций, что я давал в самом начале топика.

Это сообщение отредактировал(а) Fortop - 5.3.2010, 16:27


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Zmiuko
Дата 5.3.2010, 16:30 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



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

Добавлено через 19 секунд
Имею ввиду про его создателей.
PM MAIL WWW ICQ Skype Jabber   Вверх
Fortop
Дата 5.3.2010, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Zmiuko, никаких проблем с чтением/записью файлов нет.

Есть проблемы отсутствия знаний.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Ипатьев
Дата 5.3.2010, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Цитата(Zmiuko @  5.3.2010,  16:30 Найти цитируемый пост)
Если в PHP программисты большое внимания уделили чтении-записи файла,

ну вот опять эта нехорошая черта, считать всех вокруг дураками.
при том, что эти средства к пхп отношения не имеют, а предоставлены операционной системой и - главное - этими же самыми средставми пользуются все остальные. и не жужжат.
а нашему непризнанному гению средства мешают 
PM MAIL   Вверх
IgorIV
Дата 5.3.2010, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



Цитата(Zmiuko @  5.3.2010,  09:16 Найти цитируемый пост)
$img = imagecreatefromstring(file_get__contents($filename));

Хм, если это делается на PHP, то в твоем случае задача решается похоже.
Код

DELETE FROM table_name WHERE id=x

PM MAIL   Вверх
Ипатьев
Дата 5.3.2010, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



IgorIV, формально ваши слоа можно оспорить.
библиотека, входящая в состав РНР и сторонняя программа (демон) - это, все-таки, разные вещи smile
на самом-то деле проблема совсем не в чистоте средств. 
PM MAIL   Вверх
IgorIV
Дата 5.3.2010, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



Блин, облажался smile
Это должно было выглядеть так:

Код

mysql_query ("DELETE FROM table_name WHERE id=x");


Ипатьев, формально? 
Ну да, формально на PHP можно что-то нарисовать, только для этого надо использовать сторонние модули. В данном случае ТС использовал GD. Так же формально можно редактировать и гигабайтные файлы, используя те же сторонние модули. В данном случае я использовал mysql. Пока не вижу кардинальных различий. Придратся к мелочам конечно можно ... smile
PM MAIL   Вверх
Ипатьев
Дата 5.3.2010, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



GD сложно считать "сторонним модулем"
imagecreatefromstring - это функция РНР
точно так же, как и mysql_query 
которая одна, сама по себе, работать не будет
PM MAIL   Вверх
awers
Дата 5.3.2010, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1465
Регистрация: 22.3.2006
Где: Россия, Таганрог

Репутация: 21
Всего: 31



Модератор: Давайте вернёмся к теме обсуждения.
PM MAIL WWW ICQ Skype   Вверх
gcc
Дата 5.3.2010, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



Zmiuko, 

если строка value фиксированная 1000 байт
Код

строка_55555555  value
строка_55555556  value
строка_55555557  value


если надо удалить строку строка_55555556 

нужно найти ее позицию, и нужно записать fwrite -1000 "с минус" и оно должно удалить с конца строки...
Код

строка_55555555  value
строка_55555556 
строка_55555557  value

оставить для индекса  строка_55555556 на всякий случай

Это сообщение отредактировал(а) gcc - 5.3.2010, 22:25
PM WWW ICQ Skype GTalk Jabber   Вверх
Fortop
Дата 5.3.2010, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



gcc, 
Я вот читаю периодически Ваши советы и просто не могу понять о чем они? И главное зачем?

Какой индекс строки? Что Вы хотите искать в файле с равноразмерными строками? Зачем это что-то искать?



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Ипатьев
Дата 5.3.2010, 22:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Fortop, чтобы удалить, например smile

PM MAIL   Вверх
gcc
Дата 5.3.2010, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



Fortop, разве строки могут быть не упорядоченными? (посмотрите первую страницу, у него по-моиму сортированные строки, он не говорит)
если создать файлик 1Гиг-40Гиг и если каждую строку сравнить с какой нибудь строкой? сколько это займет времени и сколько ресурсов? а если они будут упорядоченными, то будет легче и(или) на много быстрее...

Это сообщение отредактировал(а) gcc - 6.3.2010, 00:27
PM WWW ICQ Skype GTalk Jabber   Вверх
Fortop
Дата 6.3.2010, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(gcc @  5.3.2010,  21:50 Найти цитируемый пост)
 разве строки могут быть не упорядоченными?

Что значит неупорядоченные строки? Вот в моем сообщении сейчас строки упорядочены? Или нет?

Цитата(gcc @  5.3.2010,  21:50 Найти цитируемый пост)
посмотрите первую страницу, у него по-моиму сортированные строки

Цитату не сложно оттуда? А то мое зрение меня подводит.
Откуда вообще выплыла сортировка?

Цитата(gcc @  5.3.2010,  21:50 Найти цитируемый пост)
а если они будут упорядоченными, то будет легче и(или) на много быстрее...

Поздравляю, вы открыли для себя индексы. Теперь стоит еще подумать о том, что и по чем собираетесь сортировать.

Цитата(Ипатьев @  5.3.2010,  21:47 Найти цитируемый пост)
Fortop, чтобы удалить, например

Гм, а для редактирования не нужно знать что редактируешь?
Вставка/Удаление в любом случае потребуют полной перезаписи файла (если это файл, а не БД)

Но вопрос в другом.
ТС хотел обращаться к строке по ее номеру. И в случае фиксированной длины нахождение строки делается одним оператором fseek(номер строки * длина). Все.
Кстати формат DBF весьма познавателен в плане того как организовать отложенное физическое удаление, но это будет далеко не просто файл.

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





--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Ипатьев
Дата 6.3.2010, 09:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Цитата(Fortop @  6.3.2010,  02:15 Найти цитируемый пост)
а для редактирования не нужно знать что редактируешь?

об этом и речь. 
сначала узнать, что хочешь удалить
потом - найти
потом - удалить. 
без среднего пункта, по-моему, не получится  smile 

вообще, спорить о том, что имел в виду автор, или о значениях слова "поиск" (fseek, например, происходит от слова "искать") - занятие неблагодарное. я завязываю. 
PM MAIL   Вверх
Zmiuko
  Дата 6.3.2010, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Вот спорят-то smile 

Заранее имелось ввиду, что в файле строки не фиксированнной длины. Но склоняюсь к способу предложенному Fortopом, можно к концу каждой строки прибавить нулевые байты. Делаем лишнее действие, теряем время, и вообще можно поспорить о нужности, но редактировать способом Fortopа действительно легче.
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 6.3.2010, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Как я уже ему говорил, этот способ в современных СУБД практически не применяется.
Потому что по номеру строки никто никогда к ней не обращается.
PM MAIL   Вверх
Zmiuko
Дата 6.3.2010, 11:05 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Цитата(Ипатьев @  6.3.2010,  11:03 Найти цитируемый пост)
Как я уже ему говорил, этот способ в современных СУБД практически не применяется.
Потому что по номеру строки никто никогда к ней не обращается. 


Ну у нас же не СУБД. Или Вы про другое?
PM MAIL WWW ICQ Skype Jabber   Вверх
Ипатьев
Дата 6.3.2010, 11:14 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



У нас субд.
чтобы это понять, надо либо обладать знаниями, либо реализовать всю идею на практике, вместо разглагольствований на форуме.
PM MAIL   Вверх
Zmiuko
Дата 6.3.2010, 11:23 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Цитата(Ипатьев @  6.3.2010,  11:14 Найти цитируемый пост)
У нас субд.
чтобы это понять, надо либо обладать знаниями, либо реализовать всю идею на практике, вместо разглагольствований на форуме. 


За-ме-ча-тель-на!
PM MAIL WWW ICQ Skype Jabber   Вверх
MoLeX
Дата 6.3.2010, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140




M
MoLeX
Модератор: выясняйте отношения в личке



--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.