Answer the question
In order to leave comments, you need to log in
Why php script freezes after 10k iterations?
Hello, I have this code.
<?
ini_set('max_execution_time', 900);
$start = microtime(true);
function multiRequest($data, $options = array()) {
// array of curl handles
$curly = array();
// data to be returned
$result = array();
// multi handle
$mh = curl_multi_init();
// loop through $data and create curl handles
// then add them to the multi-handle
foreach ($data as $id => $d) {
$curly[$id] = curl_init();
$url = (is_array($d) && !empty($d['url'])) ? $d['url'] : $d;
curl_setopt($curly[$id], CURLOPT_URL, $url);
curl_setopt($curly[$id], CURLOPT_HEADER, 0);
curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, 1);
// post?
if (is_array($d)) {
if (!empty($d['post'])) {
curl_setopt($curly[$id], CURLOPT_POST, 1);
curl_setopt($curly[$id], CURLOPT_POSTFIELDS, $d['post']);
}
}
// extra options?
if (!empty($options)) {
curl_setopt_array($curly[$id], $options);
}
curl_multi_add_handle($mh, $curly[$id]);
}
// execute the handles
$running = null;
do {
curl_multi_exec($mh, $running);
} while($running > 0);
// get content and remove handles
foreach($curly as $id => $c) {
$result[$id] = curl_multi_getcontent($c);
curl_multi_remove_handle($mh, $c);
}
// all done
curl_multi_close($mh);
return $result;
}
for ($i = 3000000 ; $i <= 3000040; $i++) {
$next = 'https:/example.ru/tr/'.$i;
$data[$i] = $next;
}
$r = multiRequest($data);
$kr = count($r) + 3000000;
for ($b = 3000000 ; $b <= $kr; $b++){
if (strpos($r[$b], 'window.trackErrorPage') !== false)
{
$inexistente [] = $b;
}
else {
$existente [] = $b;
}
}
$tm = microtime(true) - $start;
echo $tm;
echo "<hr>";
echo "True ".count($existente);
echo "<hr>";
echo "False = ".count($inexistente);
?>
Answer the question
In order to leave comments, you need to log in
Because you wrote, to put it mildly, shitty code that eats up all the memory. Asking for 10k results and writing them all into one array is a very bad idea. You remove saving the intermediate result, the function simply returns true / false and is called 10k times, or 100k. And in our case, a function is called into which a huge array is passed and an even larger array is returned.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question