Good.
Now, let's assume the iterator is fine and it crashes at some point during the scanning.
Try changing:
foreach ($iterator as $file)
{
$class_name = $namespace . preg_replace('~([^^])((?<=)[A-Z](?=[a-z]))~', '$1_$2', $file->getBasename('.controller.php')) . '_Controller';
to:
foreach ($iterator as $file)
{
echo $glob->getFilename() . '<br>';
Errors::instance()->log_error($file->getFilename());
$class_name = $namespace . preg_replace('~([^^])((?<=)[A-Z](?=[a-z]))~', '$1_$2', $file->getBasename('.controller.php')) . '_Controller';
it we are lucky the last showed/logged is the problematic file.
If you don't see anything accessing the page, try looking in the error log.