| 
									
										
										
										
											2003-05-08 20:21:16 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Smarty plugin | 
					
						
							|  |  |  |  * @package Smarty | 
					
						
							|  |  |  |  * @subpackage plugins | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * create full directory structure | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @param string $dir | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // $dir
 | 
					
						
							| 
									
										
										
										
											2003-10-11 08:55:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-06-22 03:13:25 +00:00
										 |  |  | function smarty_core_create_dir_structure($params, &$smarty) | 
					
						
							| 
									
										
										
										
											2003-05-08 20:21:16 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2003-05-10 15:35:44 +00:00
										 |  |  |     if (!file_exists($params['dir'])) { | 
					
						
							|  |  |  |         $_open_basedir_ini = ini_get('open_basedir'); | 
					
						
							| 
									
										
										
										
											2003-05-08 20:21:16 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-05-10 15:35:44 +00:00
										 |  |  |         if (DIRECTORY_SEPARATOR=='/') { | 
					
						
							|  |  |  |             /* unix-style paths */ | 
					
						
							|  |  |  |             $_dir = $params['dir']; | 
					
						
							|  |  |  |             $_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY); | 
					
						
							| 
									
										
										
										
											2005-11-23 20:36:05 +00:00
										 |  |  |             $_new_dir = (substr($_dir, 0, 1)=='/') ? '/' : getcwd().'/'; | 
					
						
							| 
									
										
										
										
											2003-05-10 15:35:44 +00:00
										 |  |  |             if($_use_open_basedir = !empty($_open_basedir_ini)) { | 
					
						
							|  |  |  |                 $_open_basedirs = explode(':', $_open_basedir_ini); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2003-05-08 20:21:16 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-05-10 15:35:44 +00:00
										 |  |  |         } else { | 
					
						
							|  |  |  |             /* other-style paths */ | 
					
						
							|  |  |  |             $_dir = str_replace('\\','/', $params['dir']); | 
					
						
							|  |  |  |             $_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY); | 
					
						
							| 
									
										
										
										
											2003-12-01 11:29:53 +00:00
										 |  |  |             if (preg_match('!^((//)|([a-zA-Z]:/))!', $_dir, $_root_dir)) { | 
					
						
							| 
									
										
										
										
											2003-05-10 15:35:44 +00:00
										 |  |  |                 /* leading "//" for network volume, or "[letter]:/" for full path */ | 
					
						
							|  |  |  |                 $_new_dir = $_root_dir[1]; | 
					
						
							|  |  |  |                 /* remove drive-letter from _dir_parts */ | 
					
						
							|  |  |  |                 if (isset($_root_dir[3])) array_shift($_dir_parts); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2003-06-21 17:39:15 +00:00
										 |  |  |                 $_new_dir = str_replace('\\', '/', getcwd()).'/'; | 
					
						
							| 
									
										
										
										
											2003-05-08 20:21:16 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-05-10 15:35:44 +00:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2003-10-11 08:55:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-05-10 15:35:44 +00:00
										 |  |  |             if($_use_open_basedir = !empty($_open_basedir_ini)) { | 
					
						
							| 
									
										
										
										
											2003-06-21 17:39:15 +00:00
										 |  |  |                 $_open_basedirs = explode(';', str_replace('\\', '/', $_open_basedir_ini)); | 
					
						
							| 
									
										
										
										
											2003-05-10 15:35:44 +00:00
										 |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2003-10-11 08:55:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-05-10 15:35:44 +00:00
										 |  |  |         /* all paths use "/" only from here */ | 
					
						
							| 
									
										
										
										
											2003-05-08 20:21:16 +00:00
										 |  |  |         foreach ($_dir_parts as $_dir_part) { | 
					
						
							|  |  |  |             $_new_dir .= $_dir_part; | 
					
						
							| 
									
										
										
										
											2003-05-10 15:35:44 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-05-08 20:21:16 +00:00
										 |  |  |             if ($_use_open_basedir) { | 
					
						
							| 
									
										
										
										
											2003-05-10 15:35:44 +00:00
										 |  |  |                 // do not attempt to test or make directories outside of open_basedir
 | 
					
						
							| 
									
										
										
										
											2003-05-08 20:21:16 +00:00
										 |  |  |                 $_make_new_dir = false; | 
					
						
							|  |  |  |                 foreach ($_open_basedirs as $_open_basedir) { | 
					
						
							| 
									
										
										
										
											2003-10-23 07:50:55 +00:00
										 |  |  |                     if (substr($_new_dir, 0, strlen($_open_basedir)) == $_open_basedir) { | 
					
						
							| 
									
										
										
										
											2003-05-08 20:21:16 +00:00
										 |  |  |                         $_make_new_dir = true; | 
					
						
							|  |  |  |                         break; | 
					
						
							|  |  |  |                     } | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2003-10-11 08:55:53 +00:00
										 |  |  |                 $_make_new_dir = true; | 
					
						
							| 
									
										
										
										
											2003-05-08 20:21:16 +00:00
										 |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-07-25 12:40:12 +00:00
										 |  |  |             if ($_make_new_dir && !file_exists($_new_dir) && !@mkdir($_new_dir, $smarty->_dir_perms) && !is_dir($_new_dir)) { | 
					
						
							| 
									
										
										
										
											2003-06-22 03:13:25 +00:00
										 |  |  |                 $smarty->trigger_error("problem creating directory '" . $_new_dir . "'"); | 
					
						
							| 
									
										
										
										
											2003-05-08 20:21:16 +00:00
										 |  |  |                 return false; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2003-05-10 15:35:44 +00:00
										 |  |  |             $_new_dir .= '/'; | 
					
						
							| 
									
										
										
										
											2003-05-08 20:21:16 +00:00
										 |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* vim: set expandtab: */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ?>
 |