source: pro-violet-viettel/sourcecode/application/third_party/Smarty/sysplugins/smarty_internal_write_file.php

Last change on this file was 345, checked in by quyenla, 11 years ago

collaborator page

File size: 1.9 KB
Line 
1<?php
2/**
3 * Smarty write file plugin
4 *
5 * @package Smarty
6 * @subpackage PluginsInternal
7 * @author Monte Ohrt
8 */
9
10/**
11 * Smarty Internal Write File Class
12 *
13 * @package Smarty
14 * @subpackage PluginsInternal
15 */
16class Smarty_Internal_Write_File {
17
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        }
33
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        }
39
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        }
47
48        // remove original file
49        @unlink($_filepath);
50
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        }
58
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    }
67
68}
69
70?>
Note: See TracBrowser for help on using the repository browser.