- foreach($aQuery as $tag => $query) {
- fputs($imap_stream,$query);
- $aResults[$tag] = false;
+ /*
+ Do not fire all calls at once to the imap-server but split the calls up
+ in portions of $iChunkSize. If we do not do that I think we misbehave as
+ IMAP client or should handle BYE calls if the IMAP-server drops the
+ connection because the number of queries is to large. This isn't tested
+ but a wild guess how it could work in the field.
+ */
+ $iQueryCount = count($aQueryList);
+ $iChunkSize = 32;
+ // array_chunk would also do the job but it's supported from php > 4.2
+ $aQueryChunks = array();
+ $iLoops = floor($iQueryCount / $iChunkSize);
+
+ if ($iLoops * $iChunkSize !== $iQueryCount) ++$iLoops;
+
+ if (!function_exists('array_chunk')) { // arraychunk replacement
+ reset($aQueryList);
+ for($i=0;$i<$iLoops;++$i) {
+ for($j=0;$j<$iChunkSize;++$j) {
+ $key = key($aQueryList);
+ $aTmp[$key] = $aQueryList[$key];
+ if (next($aQueryList) === false) break;
+ }
+ $aQueryChunks[] = $aTmp;
+ }
+ } else {
+ $aQueryChunks = array_chunk($aQueryList,$iChunkSize,true);