$maxloglen) { $fh = fopen(CRAWLER_LOG_FILE, 'r+'); fseek($fh, $fs - $maxloglen); fgets($fh); $buf = fread($fh, $maxloglen); ftruncate($fh, 0); rewind($fh); fwrite($fh, $buf); fclose($fh); } function logline($line) { error_log(date('[Y-m-d H:i:s] ') . $line . "\n", 3, CRAWLER_LOG_FILE); } $feeds = feeds::getRefreshList(); if (empty($feeds)) { logline('Nothing to update.'); logline($starttime->diff(new DateTime())->format('Execution time: %s seconds')); exit(0); } $c = curl_init(); // duh. curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; FeedizerBot/' . CRAWLER_VERSION . '; +http://feedizer.tigris.fanir.de/page/bot)'); // return the transfer instead of print()ing curl_setopt($c, CURLOPT_RETURNTRANSFER, true); // 10 sec connection-timeout, 30 sec total timeout curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($c, CURLOPT_TIMEOUT, 30); // Abort if slower than 1 kbyte/s for more than 10 seconds curl_setopt($c, CURLOPT_LOW_SPEED_LIMIT, 1000); curl_setopt($c, CURLOPT_LOW_SPEED_TIME, 10); // max average recieve speed of 2 Mbyte/s curl_setopt($c, CURLOPT_MAX_RECV_SPEED_LARGE, 2000000); // Follow max. 2 redirects (Location-header) curl_setopt($c, CURLOPT_FOLLOWLOCATION, true); curl_setopt($c, CURLOPT_MAXREDIRS, 2); function fetch(&$val, $key) { global $c; curl_setopt($c, CURLOPT_URL, $val['uri']); $val['new_html'] = curl_exec($c); } array_walk($feeds, 'fetch'); foreach ($feeds as $feed) { switch (feedItems::newItem($feed['id'], $feed['new_html'])) { case 0: logline($feed['slug'] . "\tupdated"); break; case 1: logline($feed['slug'] . "\tunchanged"); break; default: logline($feed['slug'] . "\tFAILED!"); } feeds::updateNextRefresh($feed['id']); } /* #VAR2 $c = array(); $cm = curl_multi_init(); $cm_running = null; $cnt = 0; foreach ($feeds as $i => $feed) { $c[$i] = curl_init($feed['uri']); // duh. curl_setopt($c[$i], CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; FeedizerBot/' . CRAWLER_VERSION . '; +http://feedizer.tigris.fanir.de/page/bot)'); // return the transfer instead of print()ing curl_setopt($c[$i], CURLOPT_RETURNTRANSFER, true); // 10 sec connection-timeout, 30 sec total timeout curl_setopt($c[$i], CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($c[$i], CURLOPT_TIMEOUT, 30); // Abort if slower than 1 kbyte/s for more than 10 seconds curl_setopt($c[$i], CURLOPT_LOW_SPEED_LIMIT, 1000); curl_setopt($c[$i], CURLOPT_LOW_SPEED_TIME, 10); // max average recieve speed of 2 Mbyte/s curl_setopt($c[$i], CURLOPT_MAX_RECV_SPEED_LARGE, 2000000); // Follow max. 2 redirects (Location-header) curl_setopt($c[$i], CURLOPT_FOLLOWLOCATION, true); curl_setopt($c[$i], CURLOPT_MAXREDIRS, 2); curl_multi_add_handle($cm, $c[$i]); } do { curl_multi_exec($cm, $cm_running); curl_multi_select($cm); do { $cm_info = curl_multi_info_read($cm, $cm_queuelen); var_dump($cm_info); } while ($cm_queuelen > 0); } while ($cm_running > 0); */ logline('Execution time: ' . $starttime->diff(new DateTime())->format('%s'));