b57d50eaf36c03dfc67953bcf3dae253b2e9a9ea
[atutor.git] / mods / phpdoc2 / PhpDocumentor / phpDocumentor / Smarty-2.6.0 / libs / core / core.create_dir_structure.php
1 <?php\r
2 /**\r
3  * Smarty plugin\r
4  * @package Smarty\r
5  * @subpackage plugins\r
6  */\r
7 \r
8 /**\r
9  * create full directory structure\r
10  *\r
11  * @param string $dir\r
12  */\r
13 \r
14 // $dir\r
15 \r
16 function smarty_core_create_dir_structure($params, &$smarty)\r
17 {\r
18     if (!file_exists($params['dir'])) {\r
19         $_open_basedir_ini = ini_get('open_basedir');\r
20 \r
21         if (DIRECTORY_SEPARATOR=='/') {\r
22             /* unix-style paths */\r
23             $_dir = $params['dir'];\r
24             $_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY);\r
25             $_new_dir = ($_dir{0}=='/') ? '/' : getcwd().'/';\r
26             if($_use_open_basedir = !empty($_open_basedir_ini)) {\r
27                 $_open_basedirs = explode(':', $_open_basedir_ini);\r
28             }\r
29 \r
30         } else {\r
31             /* other-style paths */\r
32             $_dir = str_replace('\\','/', $params['dir']);\r
33             $_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY);\r
34             if (preg_match('!^((//)|([a-zA-Z]:/))!', $_dir, $_root_dir)) {\r
35                 /* leading "//" for network volume, or "[letter]:/" for full path */\r
36                 $_new_dir = $_root_dir[1];\r
37                 /* remove drive-letter from _dir_parts */\r
38                 if (isset($_root_dir[3])) array_shift($_dir_parts);\r
39 \r
40             } else {\r
41                 $_new_dir = str_replace('\\', '/', getcwd()).'/';\r
42 \r
43             }\r
44 \r
45             if($_use_open_basedir = !empty($_open_basedir_ini)) {\r
46                 $_open_basedirs = explode(';', str_replace('\\', '/', $_open_basedir_ini));\r
47             }\r
48 \r
49         }\r
50 \r
51         /* all paths use "/" only from here */\r
52         foreach ($_dir_parts as $_dir_part) {\r
53             $_new_dir .= $_dir_part;\r
54 \r
55             if ($_use_open_basedir) {\r
56                 // do not attempt to test or make directories outside of open_basedir\r
57                 $_make_new_dir = false;\r
58                 foreach ($_open_basedirs as $_open_basedir) {\r
59                     if (substr($_new_dir, 0, strlen($_open_basedir)) == $_open_basedir) {\r
60                         $_make_new_dir = true;\r
61                         break;\r
62                     }\r
63                 }\r
64             } else {\r
65                 $_make_new_dir = true;\r
66             }\r
67 \r
68             if ($_make_new_dir && !file_exists($_new_dir) && !@mkdir($_new_dir, $smarty->_dir_perms) && !is_dir($_new_dir)) {\r
69                 $smarty->trigger_error("problem creating directory '" . $_new_dir . "'");\r
70                 return false;\r
71             }\r
72             $_new_dir .= '/';\r
73         }\r
74     }\r
75 }\r
76 \r
77 /* vim: set expandtab: */\r
78 \r
79 ?>\r