Я использую следующую многопоточность CURL для добавления многопоточности к процессам PHP:
function multithread_it($url,$threads){
$started=0;
while ($started<$threads){
$ch[$started] = curl_init();
curl_setopt($ch[$started], CURLOPT_URL, $url);
curl_setopt($ch[$started], CURLOPT_HEADER, 0);
curl_setopt($ch[$started], CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch[$started], CURLOPT_RETURNTRANSFER, 0);
$started++;
}
$started=0;
$mh = curl_multi_init();
while ($started<$threads){
curl_multi_add_handle($mh,$ch[$started]);
$started++;
}
$started=0;
$running=null;
do {curl_multi_exec($mh,$running);} while($running > 0);
while ($started<$threads){
curl_multi_remove_handle($mh, $ch[$started]);
$started++;
}
curl_multi_close($mh);
ob_flush();
flush();
}
Это называется с помощью, например,
multithread_it($script_dir."script.php",10);
Внутри script.php у меня есть:
for($i=0;$i<10;$i++){
echo $i."<br />";
sleep(1);
ob_flush();
flush();
}
Но данные останавливаются.Сценарий, который вызывает multithread_it, ждет, пока все сценарии не будут завершены, прежде чем отобразить данные, которые внезапно появятся на экране.
Это только примерные данные сценария, для запуска которого фактически требуется около 10 минут, но та же концепцияи коды, используемые с flush, ob_flush и точной функцией.
Любые идеи, как я могу получить содержимое в script.php для отображения в родительском скрипте при его загрузке?