summaryrefslogtreecommitdiff
path: root/lib/smarty/sysplugins/smarty_internal_write_file.php
diff options
context:
space:
mode:
authoremkael <emkael@tlen.pl>2016-10-11 14:01:29 +0200
committeremkael <emkael@tlen.pl>2016-10-11 14:01:29 +0200
commit51609351f2c4b5082b7e6f0744cd3811c325303f (patch)
tree739015e9ec69bc185ebe30db21369ae0b8b692ce /lib/smarty/sysplugins/smarty_internal_write_file.php
parent8d1b0dad63e3906efa9393ef01d08b77d83417b5 (diff)
* initial template
Diffstat (limited to 'lib/smarty/sysplugins/smarty_internal_write_file.php')
-rw-r--r--lib/smarty/sysplugins/smarty_internal_write_file.php70
1 files changed, 70 insertions, 0 deletions
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 @@
+<?php
+/**
+ * Smarty write file plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Monte Ohrt
+ */
+
+/**
+ * Smarty Internal Write File Class
+ *
+ * @package Smarty
+ * @subpackage PluginsInternal
+ */
+class Smarty_Internal_Write_File {
+
+ /**
+ * Writes file in a safe way to disk
+ *
+ * @param string $_filepath complete filepath
+ * @param string $_contents file content
+ * @param Smarty $smarty smarty instance
+ * @return boolean true
+ */
+ public static function writeFile($_filepath, $_contents, Smarty $smarty)
+ {
+ $_error_reporting = error_reporting();
+ error_reporting($_error_reporting & ~E_NOTICE & ~E_WARNING);
+ if ($smarty->_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