Mercurial > epgrec.yaz
comparison Smarty/internals/core.write_file.php @ 1:f5a9f0eb4858
deleted: LICENSE.ja
author | Sushi-k <epgrec@park.mda.or.jp> |
---|---|
date | Wed, 08 Jul 2009 11:44:50 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:96312e6ab8d4 | 1:f5a9f0eb4858 |
---|---|
1 <?php | |
2 /** | |
3 * Smarty plugin | |
4 * @package Smarty | |
5 * @subpackage plugins | |
6 */ | |
7 | |
8 /** | |
9 * write out a file to disk | |
10 * | |
11 * @param string $filename | |
12 * @param string $contents | |
13 * @param boolean $create_dirs | |
14 * @return boolean | |
15 */ | |
16 function smarty_core_write_file($params, &$smarty) | |
17 { | |
18 $_dirname = dirname($params['filename']); | |
19 | |
20 if ($params['create_dirs']) { | |
21 $_params = array('dir' => $_dirname); | |
22 require_once(SMARTY_CORE_DIR . 'core.create_dir_structure.php'); | |
23 smarty_core_create_dir_structure($_params, $smarty); | |
24 } | |
25 | |
26 // write to tmp file, then rename it to avoid file locking race condition | |
27 $_tmp_file = tempnam($_dirname, 'wrt'); | |
28 | |
29 if (!($fd = @fopen($_tmp_file, 'wb'))) { | |
30 $_tmp_file = $_dirname . DIRECTORY_SEPARATOR . uniqid('wrt'); | |
31 if (!($fd = @fopen($_tmp_file, 'wb'))) { | |
32 $smarty->trigger_error("problem writing temporary file '$_tmp_file'"); | |
33 return false; | |
34 } | |
35 } | |
36 | |
37 fwrite($fd, $params['contents']); | |
38 fclose($fd); | |
39 | |
40 if (DIRECTORY_SEPARATOR == '\\' || !@rename($_tmp_file, $params['filename'])) { | |
41 // On platforms and filesystems that cannot overwrite with rename() | |
42 // delete the file before renaming it -- because windows always suffers | |
43 // this, it is short-circuited to avoid the initial rename() attempt | |
44 @unlink($params['filename']); | |
45 @rename($_tmp_file, $params['filename']); | |
46 } | |
47 @chmod($params['filename'], $smarty->_file_perms); | |
48 | |
49 return true; | |
50 } | |
51 | |
52 /* vim: set expandtab: */ | |
53 | |
54 ?> |