diff --git a/change_log.txt b/change_log.txt index 016322c9..9d8bab62 100644 --- a/change_log.txt +++ b/change_log.txt @@ -1,6 +1,7 @@ ===== Smarty 3.1 trunk ===== 21.09.2011 - 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 - bugfix removed debug echo output while compiling template inheritance diff --git a/libs/sysplugins/smarty_internal_write_file.php b/libs/sysplugins/smarty_internal_write_file.php index aae600ee..4e34335f 100644 --- a/libs/sysplugins/smarty_internal_write_file.php +++ b/libs/sysplugins/smarty_internal_write_file.php @@ -1,70 +1,56 @@ _file_perms !== null) { - $old_umask = umask(0); - } - - $_dirpath = dirname($_filepath); + $old_umask = umask(0); + $_dirpath = dirname($_filepath); // if subdirs, create dir structure 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 - $_tmp_file = $_dirpath . DS . uniqid('wrt'); - if (!file_put_contents($_tmp_file, $_contents)) { - error_reporting($_error_reporting); + $_tmp_file = tempnam($_dirpath, 'wrt'); + + 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}"); return false; - } + } + } + + fwrite($fd, $_contents); + fclose($fd); // remove original file - unlink($_filepath); - + if (file_exists($_filepath)) + @unlink($_filepath); // rename tmp file - $success = rename($_tmp_file, $_filepath); - if (!$success) { - error_reporting($_error_reporting); - throw new SmartyException("unable to write file {$_filepath}"); - return false; - } - - if ($smarty->_file_perms !== null) { - // set file permissions - chmod($_filepath, $smarty->_file_perms); - umask($old_umask); - } - error_reporting($_error_reporting); + rename($_tmp_file, $_filepath); + // set file permissions + chmod($_filepath, $smarty->_file_perms); + umask($old_umask); return true; - } - -} + } +} ?> \ No newline at end of file