Тут идея пришал одна по релазации многопоточности в php путём клона кода Code: <?php echo "hello"; echo '<html>...ect'; <?php $go = $_POST['go']; //пуск $potok = $_POST['potok']; //сколько потоков $numberscript = n; // номер скрипта $a = $potok - $numberscript; if(!$go, $a >= 0) { echo "ok";// любой код при работе с массивами можно прибавить $numberscript таким образом разбив задачу на потоки } ?> <?php $go = $_POST['go']; //пуск $potok = $_POST['potok']; //сколько потоков $numberscript = n; // номер скрипта $a = $potok - $numberscript; if(!$go, $a >= 0) { echo "ok";// любой код при работе с массивами можно прибавить $numberscript таким образом разбив задачу на потоки } ?> <?php $go = $_POST['go']; //пуск $potok = $_POST['potok']; //сколько потоков $numberscript = n; // номер скрипта $a = $potok - $numberscript; if(!$go, $a >= 0) { echo "ok";// любой код при работе с массивами можно прибавить $numberscript таким образом разбив задачу на потоки } ?> ........... <?php $go = $_POST['go']; //пуск $potok = $_POST['potok']; //сколько потоков $numberscript = n; // номер скрипта $a = $potok - $numberscript; if(!$go, $a >= 0) { echo "ok";// любой код при работе с массивами можно прибавить $numberscript таким образом разбив задачу на потоки } ?> Сделал небольшой набросочек ИМХО должно работать???!!!
Костыль на костыле костылем погоняет. Зачем нужна многопоточность на пхп? Всякие бруты и т.д.? Тогда зачем ПХП? Питон в лапы(или перл для извращенцев) и вперед на мины. Ибо уже куча модулей. А тем, кто не хочет учить питон, предлагаю курить доки про форки.
2nerezus: Я же написал на многопоточность на php... Конечно согласен, что реализация путем клонирования кода не самая лучшая... Для чего надо??? Например: написать сокс чекер на php в потоков 50-100 2ZaCo: Нет не наркоман
2St__one 1) у тебя в коде вложенные конструкции начала пхп-кода 2) я не пойму ка кты решил этим делать многопоточность... с таким же успехом можно позапускать несколько копий пхп. а тут у тебя код последовательно выполняется. или я дурак. какой n?? я не понимаю
2ZaCo: не закрыл, торопился это лишь набросок, чтобы понять мысль n это номер скрипта(0, 1, 2 .... так далее) ))) 2Dr.Check: цикл будте выполняться послелодвательно 2fucker"ok: а 100 проще?
http://www.stableversion.com/2006/04/17/multithread-php/ вот тебе нормальная "многопоточность", хватит извращаться
Кто тебе поведал? Конечно неблокирующим вводом\выводом в т.ч. в/из сокетов многопоточность в полном смысле слова заменить нельзя, но для подавляющего большинства всех задач, которые захотят решать местные Хакеры этого будет вполне достаточно
На каком – то сайте видел вот такой пример «многопоточности». Тут естественно идёт симуляция, т.к. в php многопоточности нет. Пример никогда не использовал, т.к. так и не встретился с задачей в которой это хоть чем то помогло. PHP: config.php // путь, где расположены скрипты $path = http://domain.com/path/; // число потоков $max_threads = 20; launcher.php require_once(”config.php”); // инициализация $sockets = array(); $done = false; // будем работать, к примеру с набором // ключевых слов $keywords = fopen(”keywords.txt”, “r”); // приступаем к многопоточной работе while (!$done) { // если обнаружен файл, // то прекращаем выполнение скрипта if (file_exists(”stop-file”)) die; // если число запущенных потоков меньше // разрешенного максимума // то запускаем потоки еще if ($max_threads > count($sockets)) { if (!feof($keywords)) { $buffer = array(); // читаем ключевое слово // в реальности в этот массив можно // положить очень много всего // а не только одно ключевое слово… $buffer[] = trim(fgets($keywords)); // задаем данные для запуска сокета // request.php - это тот файл, // которые делает “дело” $query_url = $path . “request.php”; $url_info = parse_url($query_url); $url_info[port] = ($url_info[port]) ? $url_info[port] : 80; $url_info[path] = ($url_info[path]) ? $url_info[path] : “/”; $url_info[query] = ($url_info[query]) ? “?” . $url_info[query] : “”; // пакуем данные для передачи // в генерирующий скрипт // использование serialize очень удобно, // так как позволяет // залить в request.php мегабайты данных $request = serialize($buffer); // формируем запрос для передачи по сокету $query = “POST ” . $url_info[path] . ” HTTP/1.1\r\n”; $query = $query . “Content-Type: text/xml\r\n”; $query = $query . “Host: ” . $url_info[host] . “\r\n”; $query = $query . “Content-length: ” . (strlen($request)) . “\r\n\r\n”; $query = $query . $request; // создаем сокет, переводим его // в неблокирующий режим и запускаем // обработчик запросов $errno = 0; $error = “”; $socket = fsockopen($url_info[host], $url_info[port], $errno, $error, 30); stream_set_blocking($socket, 0); stream_set_timeout($socket, 3600); fputs($socket, $query); // запоминаем запущенный сокет $sockets[md5(time())] = $socket; } } // читаем данные из сокета. формально они нам // не нужны, но это позволяет // отработать обработчкику запросов reset($sockets); while ($socket = current($sockets)) { if (feof($socket)) { // убиваем сокет, который отработал unset($sockets[key($sockets)]); } else { // читаем данные из сокета $temp = fgets($socket, 1000); } // обрабатываем следующий сокет next($sockets); } // делаем небольщую задержку, // иначе загруженность сервера // приближается к 100 процентам sleep(1); // если нет активных сокетов, то можно выходить if (count($sockets) == 0) $done = true; } fclose($keywords); die; может кому то пригодится ...
=) Это нам только что показывали, здесь "многопоточность" реализована безобразно, но смысл понятен, если сделать тоже самое с функциями socket_ и использованием селеста, то можно сделать замечательно работающие программы с распараллеленной работой с серверами (например для брута, скана и т.д. Так же таким образом делается кроссплатформенные серверы на PHP)
правильно в пхп нет многопоточности так как пхп это интерпретаторны а не компиляторный язык программинга в пхп разные части кода одновременно выполнять нльзя и циклы это не многопоточность если тока в одном цикле не указатть к примеру десять коннектов одновременно но всё же не закончив один коннект к другому не перейдёт он он же построчно читает и выполняет а компиляторные другое дело
с таким же успехом можно и system('php '.__file__) мутить) с передачей левого параметра. вообще согласен с Pochka - елси необходимо реализовывать многопоточность для работы с сокетами то лучше просто юзать их в неблокирующем режиме... только вот функции для этого не вкулючены по-умолчанию - используем php_sockets. 2Sw%00p а перл с питоном это бабушкины сказки?) что мешает выполнять многопоточность в скриптовом языке программирования? разве интерпретатор не может этого уследить?
Бэмц. Не в состоянии сейчас ситать весь топик, скажу из своего опыта - pcntl - спец. модуль пхп для многопоточности. Чтобы была поддержка, нужно компиллить с опцией --with-pcntl. Также можно делать exec('php thread.php параметры_или_файл_с_сериалайзнутым_массивом_параметров &') system('аналогично') и прочее. Для каждого случая нужен свой способ: если вы пишете для себя, можно юзеть pcntl, если какой-нибудь скрипт, предназначенный для массового распространения, лучше юзать системные вызовы, т.к. pcntl установлен далеко не везде, а рут есть не у всех сами понимаете . Некоторые еще извращаются с ифреймами... Но по мне так если скрипт многопоточный, значит он серьезный, и тут мне больше нравится консольная реализация. Можно лишь написать админку с использованием хтмл, которая, в свою очередь, будет запускать главный скрипт или сразу потоки... ВОт такой вот бред сбодуна получился
бля речь шла о пхп а не о перле как ты можешь в скрипте одновременно выполнить две процедуры да ни как интерпретатор читает построчно и выполняет поочереди а вот например в Делфи можно открыть букет сокетов вот те и многопоточность а в пхп невозможно тока из за того что он интерпретаторный опять таки цикл это не многопоточность если так говоришь про многопоточность то напарь любой скриптик где одновременно 10 коннектов было