Возможно я что то не догоняю… или просто не так понимаю логику работы)
index.php - запуск
script.php - файл отвечающий за действия
<?php
set_time_limit(0);
/* Допустим, что у нас есть массив $links_array со списком ссылок,
с которыми нам нужно что-то сделать, например скачать */
$links_array = array(1,2,3,4);
$host='test1.ru'; // наш хост
$max_threads = 20; // максимальное количество потоков
$threads = array(); // тут будем держать открытые потоки
$done = false;
//reset($links_array);
while(!$done) {
// если количество запущенных потоков меньше максимального
if(count($threads) < $max_threads) {
// получаем очередную ссылку
if($link=current($links_array)) {
// открываем сокет и формируем заголовок
$socket = fsockopen($host, 80);
//script.php - скрипт который выполняет задачу
$url="http://".$host."/e/script.php?link=$link";
fputs($socket, "GET $url HTTP/1.0\r\n");
fputs($socket, "Host: $host\r\n");
fputs($socket, "\r\n");
stream_set_blocking($socket, 0);
stream_set_timeout($socket, 3600);
// запоминаем запущенный сокет
$threads[] = $socket;
// переходим к следующей ссылке
next($links_array);
}
}
foreach ($threads as $key=>$socket) {
if(feof($socket)) {
// если поток отработал, убираем его
fclose($socket);
unset($threads[$key]);
} else {
/* иначе считываем чтобы отработало
считываем "вникуда" так как в моем случае от
скрипта-потока мы никаких данных не получаем,
тоесть нет обратной связи со скриптом
если связь нужна, то скрипт-поток
выводит данные с помощью echo,
а скрипт-launcher их читает,
тут думаю понятно */
fgets($socket, 1000);
}
}
// делаем задержку иначе загрузка сервера приближается к 100%
sleep(1);
if (count($threads) == 0) $done = true;
}
?>
script.php
session_start();
$_SESSION['links'][] = $_GET['link'];
Поидее же должно заноситсья в сессию links каждое значение $links_array… но оно не происходит… в чем может быть дело? скрипт не мой