- bugfix use 3.0 version of smarty_internal_write_file.php because of problems with custom error handlers

This commit is contained in:
uwe.tews@googlemail.com
2011-09-21 19:39:30 +00:00
parent cade307db0
commit b77446463f
2 changed files with 29 additions and 42 deletions

View File

@@ -1,6 +1,7 @@
===== Smarty 3.1 trunk ===== ===== Smarty 3.1 trunk =====
21.09.2011 21.09.2011
- bugfix look for mixed case plugin file names as in 3.0 if not found try all lowercase - bugfix look for mixed case plugin file names as in 3.0 if not found try all lowercase
- bugfix use 3.0 version of smarty_internal_write_file.php because of problems with custom error handlers
20.09.2011 20.09.2011
- bugfix removed debug echo output while compiling template inheritance - bugfix removed debug echo output while compiling template inheritance

View File

@@ -1,70 +1,56 @@
<?php <?php
/** /**
* Smarty write file plugin * Smarty write file plugin
* *
* @package Smarty * @package Smarty
* @subpackage PluginsInternal * @subpackage PluginsInternal
* @author Monte Ohrt * @author Monte Ohrt
*/ */
/** /**
* Smarty Internal Write File Class * Smarty Internal Write File Class
*
* @package Smarty
* @subpackage PluginsInternal
*/ */
class Smarty_Internal_Write_File { class Smarty_Internal_Write_File {
/** /**
* Writes file in a safe way to disk * Writes file in a save way to disk
* *
* @param string $_filepath complete filepath * @param string $_filepath complete filepath
* @param string $_contents file content * @param string $_contents file content
* @param Smarty $smarty smarty instance
* @return boolean true * @return boolean true
*/ */
public static function writeFile($_filepath, $_contents, Smarty $smarty) public static function writeFile($_filepath, $_contents, $smarty)
{ {
$_error_reporting = error_reporting(); $old_umask = umask(0);
error_reporting($_error_reporting & ~E_NOTICE & ~E_WARNING); $_dirpath = dirname($_filepath);
if ($smarty->_file_perms !== null) {
$old_umask = umask(0);
}
$_dirpath = dirname($_filepath);
// if subdirs, create dir structure // if subdirs, create dir structure
if ($_dirpath !== '.' && !file_exists($_dirpath)) { if ($_dirpath !== '.' && !file_exists($_dirpath)) {
mkdir($_dirpath, $smarty->_dir_perms === null ? 0777 : $smarty->_dir_perms, true); mkdir($_dirpath, $smarty->_dir_perms, true);
} }
// write to tmp file, then move to overt file lock race condition // write to tmp file, then move to overt file lock race condition
$_tmp_file = $_dirpath . DS . uniqid('wrt'); $_tmp_file = tempnam($_dirpath, 'wrt');
if (!file_put_contents($_tmp_file, $_contents)) {
error_reporting($_error_reporting); if (!($fd = @fopen($_tmp_file, 'wb'))) {
$_tmp_file = $_dirpath . DS . uniqid('wrt');
if (!($fd = @fopen($_tmp_file, 'wb'))) {
throw new SmartyException("unable to write file {$_tmp_file}"); throw new SmartyException("unable to write file {$_tmp_file}");
return false; return false;
} }
}
fwrite($fd, $_contents);
fclose($fd);
// remove original file // remove original file
unlink($_filepath); if (file_exists($_filepath))
@unlink($_filepath);
// rename tmp file // rename tmp file
$success = rename($_tmp_file, $_filepath); rename($_tmp_file, $_filepath);
if (!$success) { // set file permissions
error_reporting($_error_reporting); chmod($_filepath, $smarty->_file_perms);
throw new SmartyException("unable to write file {$_filepath}"); umask($old_umask);
return false;
}
if ($smarty->_file_perms !== null) {
// set file permissions
chmod($_filepath, $smarty->_file_perms);
umask($old_umask);
}
error_reporting($_error_reporting);
return true; return true;
} }
}
}
?> ?>