// Fix potential issue on autoload if class_index is corrupted
This commit is contained in:
Vendored
+1
-1
@@ -644,4 +644,4 @@
|
|||||||
'WebserviceSpecificManagementSearchCore' => 'classes/webservice/WebserviceSpecificManagementSearch.php',
|
'WebserviceSpecificManagementSearchCore' => 'classes/webservice/WebserviceSpecificManagementSearch.php',
|
||||||
'Zone' => 'override/classes/Zone.php',
|
'Zone' => 'override/classes/Zone.php',
|
||||||
'ZoneCore' => 'classes/Zone.php',
|
'ZoneCore' => 'classes/Zone.php',
|
||||||
);
|
); ?>
|
||||||
+25
-3
@@ -54,7 +54,7 @@ class Autoload
|
|||||||
{
|
{
|
||||||
$this->root_dir = dirname(dirname(__FILE__)).'/';
|
$this->root_dir = dirname(dirname(__FILE__)).'/';
|
||||||
if (file_exists($this->root_dir.Autoload::INDEX_FILE))
|
if (file_exists($this->root_dir.Autoload::INDEX_FILE))
|
||||||
$this->index = include_once($this->root_dir.Autoload::INDEX_FILE);
|
$this->index = include($this->root_dir.Autoload::INDEX_FILE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -129,12 +129,34 @@ class Autoload
|
|||||||
$this->getClassesFromDir('override/controllers/')
|
$this->getClassesFromDir('override/controllers/')
|
||||||
);
|
);
|
||||||
ksort($classes);
|
ksort($classes);
|
||||||
$content = '<?php return '.var_export($classes, true).';';
|
$content = '<?php return '.var_export($classes, true).'; ?>';
|
||||||
|
|
||||||
// Write classes index on disc to cache it
|
// Write classes index on disc to cache it
|
||||||
$filename = $this->root_dir.Autoload::INDEX_FILE;
|
$filename = $this->root_dir.Autoload::INDEX_FILE;
|
||||||
if ((file_exists($filename) && is_writable($filename)) || is_writable(dirname($filename)))
|
if ((file_exists($filename) && is_writable($filename)) || is_writable(dirname($filename)))
|
||||||
file_put_contents($filename, $content);
|
{
|
||||||
|
// Let's write index content in cache file
|
||||||
|
// In order to be sure that this file is correctly written, a check is done on the file content
|
||||||
|
$loop_protection = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
$integrity_is_ok = false;
|
||||||
|
file_put_contents($filename, $content);
|
||||||
|
if ($loop_protection++ > 10)
|
||||||
|
break;
|
||||||
|
|
||||||
|
// If the file content end with PHP tag, integrity of the file is ok
|
||||||
|
if (preg_match('#\?>\s*$#', file_get_contents($filename)))
|
||||||
|
$integrity_is_ok = true;
|
||||||
|
}
|
||||||
|
while (!$integrity_is_ok);
|
||||||
|
|
||||||
|
if (!$integrity_is_ok)
|
||||||
|
{
|
||||||
|
file_put_contents($filename, '<?php return array(); ?>');
|
||||||
|
throw new Exception('Your file '.$filename.' is corrupted. Please remove this file, a new one will be regenerated automatically');
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
throw new Exception($filename.' is not writable!');
|
throw new Exception($filename.' is not writable!');
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user