HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #7091  
Старый 19.12.2008, 01:34
Naydav
Постоянный
Регистрация: 30.12.2006
Сообщений: 434
Провел на форуме:
849583

Репутация: 210
По умолчанию

Цитата:
Сообщение от Pashkela  
Не знаю, зачем, но я только что за 3 сек порезал дамп весом в 43 мб на 89 частей каждая по 500 кб. Не надо так не надо. Умничай дальше
Так хоть за 1 сек. 2 Гб обьясни, хотя бы себе, как я могу с моей задачей использовать твой совет? Неужели так трудно вопрос прочитать? вот именно, что "Не знаю, зачем"
 
Ответить с цитированием

  #7092  
Старый 19.12.2008, 01:35
ss88
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме:
298300

Репутация: 128
Отправить сообщение для ss88 с помощью ICQ
По умолчанию

увеличением и запоминанием позиции чтения из файла. fseek(...)

Последний раз редактировалось ss88; 19.12.2008 в 01:37..
 
Ответить с цитированием

  #7093  
Старый 19.12.2008, 01:39
Naydav
Постоянный
Регистрация: 30.12.2006
Сообщений: 434
Провел на форуме:
849583

Репутация: 210
По умолчанию

Цитата:
Сообщение от ss88  
увеличением и запоминанием позиции чтения из файла.
Т.е что -то типа
- открыл файл
- считал инфу до переноса строки
- запомнил позицию

но после скажем 300 000 - ой строки,
нам при новом обращении к файлу, нужно будет осчитывать 300 000 переносов строк, пот 300 001, 300 002 и т.д.

ну это еще медленней чем file

Или как запоминать позицыю строки? приведи пример хотя бы на файле в 10 строк

---------
смотрю с fseek
при использовании fseek, нужно ЕЩЕ вычислять размер КАЖДОЙ считанной строки, что бы знать куда потом вернутся + алгоритм считывание новой строки до символа переноса строки( именно не побайтово, а до переноса строки) = еще медленее, вернее вообще хреново...

Чем больше вариантов пробую, тем убеждаюсь - не нужно изобретать велосипед - file()

но вариант был интересный

Последний раз редактировалось Naydav; 19.12.2008 в 01:55..
 
Ответить с цитированием

  #7094  
Старый 19.12.2008, 01:41
ss88
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме:
298300

Репутация: 128
Отправить сообщение для ss88 с помощью ICQ
По умолчанию

щаз приведу
 
Ответить с цитированием

  #7095  
Старый 19.12.2008, 01:54
Naydav
Постоянный
Регистрация: 30.12.2006
Сообщений: 434
Провел на форуме:
849583

Репутация: 210
По умолчанию

Цитата:
Сообщение от ss88  
щаз приведу
Да все же уже, не нужно
я не увидел твой пост после редактирования, отписался выше
 
Ответить с цитированием

  #7096  
Старый 19.12.2008, 01:55
ss88
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме:
298300

Репутация: 128
Отправить сообщение для ss88 с помощью ICQ
По умолчанию

PHP код:
<?php
    $currPos
=0;
    
$hFile=fopen("dump.txt","r");
    
//считывание порции определенного размера
    
$currentPartOfData=fread($hFile,4096);
    
$currPos+=4096;
    
//дочитыване до конца последней строки
    
do
    {
        
$currPos++;
        
$currentPartOfData.=$byte=fread($hFile,1);
    }
    while(
$byte!='\n')
?>
Сырой и толком непродуманный пример считывания порции из твоего файла, после обработки текущей порции, считывание продолжается оттуда, где мы закончили и читается следующая порция... Нужно учитывать длину файла. Собственно, вот, это будет лучше, чем забить несколько файлов по полгектара в память

Последний раз редактировалось ss88; 19.12.2008 в 01:59..
 
Ответить с цитированием

  #7097  
Старый 19.12.2008, 02:01
Naydav
Постоянный
Регистрация: 30.12.2006
Сообщений: 434
Провел на форуме:
849583

Репутация: 210
По умолчанию

Цитата:
Сообщение от ss88  
PHP код:
<?php
    $currPos
=0;
    
$hFile=fopen("dump.txt","r");
    
//считывание порции определенного размера
    
$currentPartOfData=fread($hFile,4096);
    
$currPos+=4096;
    
//дочитыване до конца последней строки
    
do
    {
        
$currPos++;
        
$currentPartOfData.=$byte=fread($hFile,1);
    }
    while(
$byte!='\n')
?>
Сырой и толком непродуманный пример считывания порции из твоего файла, после обработки текущей порции, считывание продолжается оттуда, где мы закончили и читается следующая порция... Нужно учитывать длину файла. Собственно, вот, это будет лучше, чем забить несколько файлов по полгектара в память
Спасибо, на скорую руку, как я писал уже,
работает медленней чем file, но пища для размышленний есть!!!
еще раз спасибо!
 
Ответить с цитированием

  #7098  
Старый 19.12.2008, 02:06
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

Для долбиков в оправдание моего мега-метода, придуманного налету

Разрезаем файл на части указанной выше программой, получаем что-то типо вроде:

sql.0, sql.1 - ну это если на две части. А дальше такой код:

PHP код:
<?
for($i=0;$i<2;$i++) $p[$i]=File("sql." $i);
print_r ($p);
?>

Последний раз редактировалось Pashkela; 19.12.2008 в 02:12..
 
Ответить с цитированием

  #7099  
Старый 19.12.2008, 02:09
ss88
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме:
298300

Репутация: 128
Отправить сообщение для ss88 с помощью ICQ
По умолчанию

Цитата:
Сообщение от Naydav  
Спасибо, на скорую руку, как я писал уже,
работает медленней чем file, но пища для размышленний есть!!!
еще раз спасибо!
Ну дык, конечно же медленнее, вместо того, чтобы одним махом прочитать 300Мб, дергать винт за каждой порцией... Здесь просто нужно еще найти среднепривлекательный размер этих порций, тогда задержка, вызванная работой с диском уменьшится... Я думаю, порции порядка 20-30Мб - вполне приемлемы... Главное, потом сделать более или менее оптимальный алгоритм разбора полученного массива, чтобы он не делал лишних действий и беганий...
 
Ответить с цитированием

  #7100  
Старый 19.12.2008, 02:12
ss88
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме:
298300

Репутация: 128
Отправить сообщение для ss88 с помощью ICQ
По умолчанию

Цитата:
Сообщение от Pashkela  
Для долбиков в оправдание моего мега-метода, придуманного налету

Разрезаем файл на части указанной выше программой, получаем что-то типо вроде:

sql.0, sql.1 - ну это если на две части. А дальше такой код:

PHP код:
<?
for($i=0;$i<2;$i++) $p[0][$i]=File("sql." $i);
print_r ($p);
?>
Ну и чем это лучше??? Если мы работаем с порциями то последовательно сможем дочитывать то, чего нам не хватило, а если есть твои два файла и получился разрыв строки между ними, что тогда?
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[c/c++] Новичкам: задаем вопросы _Great_ С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 5421 21.04.2026 07:37
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ