public function save()
{
if ($this->strTop == '') {
$this->strTop = '<?php';
}
$strFile = trim($this->strTop) . "\n\n";
$strFile .= "### INSTALL SCRIPT START ###\n";
foreach ($this->arrData as $k => $v) {
$strFile .= "{$k} = {$v}\n";
}
$strFile .= "### INSTALL SCRIPT STOP ###\n";
$this->strBottom = trim($this->strBottom);
if ($this->strBottom != '') {
$strFile .= "\n" . $this->strBottom . "\n";
}
$strTemp = md5(uniqid(mt_rand(), true));
// Write to a temp file first
$objFile = fopen(TL_ROOT . '/system/tmp/' . $strTemp, 'wb');
fputs($objFile, $strFile);
fclose($objFile);
// Make sure the file has been written (see #4483)
if (!filesize(TL_ROOT . '/system/tmp/' . $strTemp)) {
\System::log('The local configuration file could not be written. Have your reached your quota limit?', __METHOD__, TL_ERROR);
return;
}
// Adjust the file permissions (see #8178)
$this->Files->chmod('system/tmp/' . $strTemp, \Config::get('defaultFileChmod'));
// Then move the file to its final destination
$this->Files->rename('system/tmp/' . $strTemp, 'system/config/localconfig.php');
// Reset the Zend OPcache
if (function_exists('opcache_invalidate')) {
opcache_invalidate(TL_ROOT . '/system/config/localconfig.php', true);
}
// Reset the Zend Optimizer+ cache (unfortunately no API to delete just a single file)
if (function_exists('accelerator_reset')) {
accelerator_reset();
}
// Recompile the APC file (thanks to Trenker)
if (function_exists('apc_compile_file') && !ini_get('apc.stat')) {
apc_compile_file(TL_ROOT . '/system/config/localconfig.php');
}
// Purge the eAccelerator cache (thanks to Trenker)
if (function_exists('eaccelerator_purge') && !ini_get('eaccelerator.check_mtime')) {
@eaccelerator_purge();
}
// Purge the XCache cache (thanks to Trenker)
if (function_exists('xcache_count') && !ini_get('xcache.stat')) {
if (($count = xcache_count(XC_TYPE_PHP)) > 0) {
for ($id = 0; $id < $count; $id++) {
xcache_clear_cache(XC_TYPE_PHP, $id);
}
}
}
$this->blnIsModified = false;
}