private function advanceChunks()
{
if ($this->chunkOffset >= $this->numChunks) {
$this->iteratorEmpty = true;
return false;
}
if ($this->firstCheck) {
$this->chunksIterator->rewind();
$this->firstCheck = false;
} else {
$this->chunksIterator->next();
}
if (!$this->chunksIterator->valid()) {
throw CorruptFileException::missingChunk($this->chunkOffset);
}
if ($this->chunksIterator->current()->n != $this->chunkOffset) {
throw CorruptFileException::unexpectedIndex($this->chunksIterator->current()->n, $this->chunkOffset);
}
$actualChunkSize = strlen($this->chunksIterator->current()->data->getData());
$expectedChunkSize = $this->chunkOffset == $this->numChunks - 1 ? $this->file->length - $this->bytesSeen : $this->file->chunkSize;
if ($actualChunkSize != $expectedChunkSize) {
throw CorruptFileException::unexpectedSize($actualChunkSize, $expectedChunkSize);
}
$this->bytesSeen += $actualChunkSize;
$this->chunkOffset++;
return true;
}