From 51609351f2c4b5082b7e6f0744cd3811c325303f Mon Sep 17 00:00:00 2001 From: emkael Date: Tue, 11 Oct 2016 14:01:29 +0200 Subject: * initial template --- .../sysplugins/smarty_internal_write_file.php | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 lib/smarty/sysplugins/smarty_internal_write_file.php (limited to 'lib/smarty/sysplugins/smarty_internal_write_file.php') diff --git a/lib/smarty/sysplugins/smarty_internal_write_file.php b/lib/smarty/sysplugins/smarty_internal_write_file.php new file mode 100644 index 0000000..743503b --- /dev/null +++ b/lib/smarty/sysplugins/smarty_internal_write_file.php @@ -0,0 +1,70 @@ +_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'); + if (!file_put_contents($_tmp_file, $_contents)) { + error_reporting($_error_reporting); + throw new SmartyException("unable to write file {$_tmp_file}"); + return false; + } + + // 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