Code

Updated integrated smarty
[gosa.git] / gosa-core / include / smarty / sysplugins / smarty_internal_write_file.php
1 <?php
2 /**
3  * Smarty write file plugin
4  *
5  * @package Smarty
6  * @subpackage PluginsInternal
7  * @author Monte Ohrt
8  */
10 /**
11  * Smarty Internal Write File Class
12  *
13  * @package Smarty
14  * @subpackage PluginsInternal
15  */
16 class Smarty_Internal_Write_File {
18     /**
19      * Writes file in a safe way to disk
20      *
21      * @param string $_filepath complete filepath
22      * @param string $_contents file content
23      * @param Smarty $smarty    smarty instance
24      * @return boolean true
25      */
26     public static function writeFile($_filepath, $_contents, Smarty $smarty)
27     {
28         $_error_reporting = error_reporting();
29         error_reporting($_error_reporting & ~E_NOTICE & ~E_WARNING);
30         if ($smarty->_file_perms !== null) {
31             $old_umask = umask(0);
32         }
34         $_dirpath = dirname($_filepath);
35         // if subdirs, create dir structure
36         if ($_dirpath !== '.' && !file_exists($_dirpath)) {
37             mkdir($_dirpath, $smarty->_dir_perms === null ? 0777 : $smarty->_dir_perms, true);
38         }
40         // write to tmp file, then move to overt file lock race condition
41         $_tmp_file = $_dirpath . DS . uniqid('wrt');
42         if (!file_put_contents($_tmp_file, $_contents)) {
43             error_reporting($_error_reporting);
44             throw new SmartyException("unable to write file {$_tmp_file}");
45             return false;
46         }
48         // remove original file
49         unlink($_filepath);
51         // rename tmp file
52         $success = rename($_tmp_file, $_filepath);
53         if (!$success) {
54             error_reporting($_error_reporting);
55             throw new SmartyException("unable to write file {$_filepath}");
56             return false;
57         }
59         if ($smarty->_file_perms !== null) {
60             // set file permissions
61             chmod($_filepath, $smarty->_file_perms);
62             umask($old_umask);
63         }
64         error_reporting($_error_reporting);
65         return true;
66     }
68 }
70 ?>