ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

19.12.2008, 11:18
|
|
Members of Antichat - Level 5
Регистрация: 09.05.2008
Сообщений: 304
Провел на форуме: 7875940
Репутация:
2362
|
|
Сообщение от imajo.ati
запустил с амперсандом
по-прежнему ждёт выполнения файла и не продолжает работу скрипта
exec('php d:/dev.php &');
Так это винда, а не линукс. Здесь такое не прокатит.
|
|
|

19.12.2008, 11:44
|
|
Познающий
Регистрация: 08.07.2005
Сообщений: 47
Провел на форуме: 149096
Репутация:
65
|
|
ОМФГ.
Ну откуда мне знатЬ, что ты под Виндой сидишь.
Резонный вопрос - у тебя и так исполняется php код. Зачем из php кода вызывать исполнение php кода - не проще ли вставить? Хотя, тебе, судя по всему - потоков в php не хватает, читай про реализации псевдомногопоточности, по слухам оч клевых вещей люди на основе оной добиваются.
|
|
|

19.12.2008, 11:56
|
|
Познавший АНТИЧАТ
Регистрация: 12.05.2007
Сообщений: 1,235
Провел на форуме: 2238549
Репутация:
1318
|
|
Неймлесс прав, в винде нормально не демонизируешь скрипт и не оторвёшься от консоли... Если нужна многопоточность вот тут есть интересная её реализация, правда крайне экспериментальная...
http://github.com/danhen/php_threads/tree/master
|
|
|

19.12.2008, 13:39
|
|
Участник форума
Регистрация: 21.02.2008
Сообщений: 255
Провел на форуме: 975514
Репутация:
177
|
|
многопоточность в ПХП мне не нужна.
мне нужно 2 параллельно работающих скрипта в многопоточной операционной системе.
т.е. 2 раза запустить php.exe с параметром. но не вручную а с помощью кода на пхп
если невозможно - очень жаль, я в унынии(
Последний раз редактировалось imajo.ati; 19.12.2008 в 13:42..
|
|
|

19.12.2008, 14:20
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме: 2769640
Репутация:
1304
|
|
ss88, Naydav Омг, что за ужос вы пишете в час ночи?) Для больших файлов Бог давно придумал fgets и stream_get_line. fgets для построчного чтения, стрим - для любого разделителя
PHP код:
<pre><?php
$startTime=microtime(true);
set_time_limit(0);
$ss=0;
$hFile=fopen("dump2.txt","r");
$fileSize=filesize("dump2.txt");
echo "<b>Размер исходного файла:</b> ".($fileSize/1048576)."Mb<br/>";
while($buf=fgets($hFile,4096))
//while($buf=stream_get_line($hFile,4096,"*"))
{
$tmp=$buf;
$ss++;
}
fclose($hFile);
echo "Предпоследняя строка: ".$tmp."\r\n".'Количество прочитанных строк '.$ss."\r\n";
echo "<br/><b>Время затраченное на операцию: </b>".(microtime(true)-$startTime)." seconds";
?>
|
|
|

19.12.2008, 14:49
|
|
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме: 298300
Репутация:
128
|
|
Сообщение от Gifts
ss88, Naydav Омг, что за ужос вы пишете в час ночи?) Для больших файлов Бог давно придумал fgets и stream_get_line. fgets для построчного чтения, стрим - для любого разделителя
изменил кое-что, но твой вариант со взятием каждой строки отдельно - это для больших файлов, конечно, самое оно, я не подумавши только что запустил такой вариант, уже минут 10 чиргыкает 100Мб...
Но кое-что я таки поменял, за что тебе спасиобо
PHP код:
<?php
$startTime=microtime(TRUE);//приблизительный замер времени начала
$db=mysql_connect("localhost","root","");
mysql_select_db("achat",$db);
//убираем лимит по времени и аборты от пользователя
set_time_limit(0);
ignore_user_abort(TRUE);
$currPos=0;//текущая позиция в байтах
$delimiter='*';
$hFile=fopen("dump.txt","rt");
$partSize=51200;//одна порция = 50Кб
$currPos=0;//текущая позиция в байтах, считая от начала файла
$fileSize=filesize("dump.txt");//размер файла
echo "<b>Размер исходного файла:</b> ".($fileSize/1048576)."Mb ({$fileSize}Bytes)<br/>";
//дочитыване до конца последней строки
while(!feof($hFile))
{//если осталось в файле меньше,чем на порцию
if($currPos+$partSize>$fileSize)
$partSize=$fileSize-$currPos;
//считывание порции определенного размера
$currentPartOfData=fread($hFile,$partSize);
$currPos+=$partSize;
/* если последний символ не разделитель строк, то нужно дочитать порцию до разделителя*/
if($currentPartOfData{strlen($currentPartOfData)-1}!=$delimiter)
{
$currentPartOfData.=$tmp=stream_get_line($hFile,$partSize,$delimiter);
$currPos+=strlen($tmp)-1;
}
/*НАГРУЗКА - разбить порцию на массив*/
$currentPartOfData=explode($delimiter,$currentPartOfData);
/*занесение значений в базу данных*/
foreach ($currentPartOfData as $string)
mysql_query("INSERT INTO gruz (str) VALUES('{$string}');",$db);
echo "#";
}
echo $currentPartOfData[count($currentPartOfData)-1]."<br/>";
fclose($hFile);
mysql_close($db);
echo "<br/>endPos={$currPos}<br/><b>Время затраченное на операцию: </b>".(microtime(TRUE)-$startTime)." seconds";
?>
кстати, теперь, когда окончание строки выдирается stream_get_line работает с такой же скоростью. А вот все таки вариант с построчным выдиранием - это не то ))) запусти такое у себя, когда файл из строк символов по 200-300, а сам файл метров 100-200, мне пришлось рестартить апач, чтобы эта медленная садистская вакханалия прекратилась. )))
Вобщем-то, закономерно, что, при уменьшении размера порции, увеличится время выполнения, но и нужно задуматься перед тем, как ставить ее больше одного Мб. Хотя наибольшего быстродействия чтение/разбиение я добился при размере порции 50Кб. 20Мб без занесения в БД обрабатывается 0,2с. Так что, уже стало ясно, по крайней мере мне, что при средних размерав дампов в 40-100Мб, операция их чтения/обработки/занесения в БД совсем даже и не критичны в таком контексте выполнения.
Последний раз редактировалось ss88; 19.12.2008 в 16:01..
|
|
|

19.12.2008, 16:33
|
|
Постоянный
Регистрация: 26.03.2008
Сообщений: 311
Провел на форуме: 3799424
Репутация:
479
|
|
мааленький вопрос. :-[
есть хеши с "мусором" вида 2008-08-18(43):3557d8eff41195a6e33efb18d356a3e5:::0
нужен только хеш
PHP код:
<?php
$op="filet.xt";
$file=file_get_contents($op) or die ("Cannot open file");
$exp=explode(":",$file);
echo $exp[1];
?>
запутался с циклом =\
и вообще оптимален ли такой вариант? или есть лучше
|
|
|

19.12.2008, 16:40
|
|
Участник форума
Регистрация: 27.11.2008
Сообщений: 161
Провел на форуме: 298300
Репутация:
128
|
|
если размер файла превысит допустимые размеры на выделение памяти для переменных, то получишь
Fatal error: Allowed memory size of хххххх bytes exhausted (tried to allocate ххххх bytes)
|
|
|

19.12.2008, 17:22
|
|
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
Провел на форуме: 1698585
Репутация:
818
|
|
#Wolf#,
есть хеши с "мусором" вида 2008-08-18(43):3557d8eff41195a6e33efb18d356a3e5:::0
нужен только хеш
PHP код:
<?php
$str = '2008-08-18(43):3557d8eff41195a6e33efb18d356a3e5::';
preg_match('#[0-9a-f]{32}#i',$str, $matches);
print_r($matches);
echo $matches[0];
?>
Это вопрос по части регулярок, задаються сюда)
http://forum.antichat.ru/thread92492.html
Последний раз редактировалось b3; 19.12.2008 в 17:27..
|
|
|

20.12.2008, 01:05
|
|
Постоянный
Регистрация: 26.03.2008
Сообщений: 311
Провел на форуме: 3799424
Репутация:
479
|
|
Сообщение от b3
#Wolf#,
PHP код:
<?php
$str = '2008-08-18(43):3557d8eff41195a6e33efb18d356a3e5::';
preg_match('#[0-9a-f]{32}#i',$str, $matches);
print_r($matches);
echo $matches[0];
?>
Это вопрос по части регулярок, задаються сюда)
http://forum.antichat.ru/thread92492.html
не универсально. а если мускульные хеши?
и список очень большой с хешкрекинга
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|