From fd626022ec02ef47b9142bba08180502babbd0ca Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 3 Jul 2012 22:23:08 -0700 Subject: add smarty engine, remove some obsolete zot1 stuff --- .../libs/sysplugins/smarty_internal_write_file.php | 88 ++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 library/Smarty/libs/sysplugins/smarty_internal_write_file.php (limited to 'library/Smarty/libs/sysplugins/smarty_internal_write_file.php') diff --git a/library/Smarty/libs/sysplugins/smarty_internal_write_file.php b/library/Smarty/libs/sysplugins/smarty_internal_write_file.php new file mode 100644 index 000000000..e5d19ce8d --- /dev/null +++ b/library/Smarty/libs/sysplugins/smarty_internal_write_file.php @@ -0,0 +1,88 @@ +_file_perms !== null) { + $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); + } + + // write to tmp file, then move to overt file lock race condition + $_tmp_file = $_dirpath . DS . uniqid('wrt', true); + if (!file_put_contents($_tmp_file, $_contents)) { + error_reporting($_error_reporting); + throw new SmartyException("unable to write file {$_tmp_file}"); + return false; + } + + /* + * Windows' rename() fails if the destination exists, + * Linux' rename() properly handles the overwrite. + * Simply unlink()ing a file might cause other processes + * currently reading that file to fail, but linux' rename() + * seems to be smart enough to handle that for us. + */ + if (Smarty::$_IS_WINDOWS) { + // remove original file + @unlink($_filepath); + // rename tmp file + $success = @rename($_tmp_file, $_filepath); + } else { + // rename tmp file + $success = @rename($_tmp_file, $_filepath); + if (!$success) { + // remove original file + @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); + return true; + } + +} + +?> \ No newline at end of file -- cgit v1.2.3