Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/*** Smarty plugin* @package Smarty* @subpackage plugins*//*** create full directory structure** @param string $dir*/// $dirfunction smarty_core_create_dir_structure($params, &$smarty){if (!file_exists($params['dir'])) {$_open_basedir_ini = ini_get('open_basedir');if (DIRECTORY_SEPARATOR=='/') {/* unix-style paths */$_dir = $params['dir'];$_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY);$_new_dir = (substr($_dir, 0, 1)=='/') ? '/' : getcwd().'/';if($_use_open_basedir = !empty($_open_basedir_ini)) {$_open_basedirs = explode(':', $_open_basedir_ini);}} else {/* other-style paths */$_dir = str_replace('\\','/', $params['dir']);$_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY);if (preg_match('!^((//)|([a-zA-Z]:/))!', $_dir, $_root_dir)) {/* 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 {$_new_dir = str_replace('\\', '/', getcwd()).'/';}if($_use_open_basedir = !empty($_open_basedir_ini)) {$_open_basedirs = explode(';', str_replace('\\', '/', $_open_basedir_ini));}}/* all paths use "/" only from here */foreach ($_dir_parts as $_dir_part) {$_new_dir .= $_dir_part;if ($_use_open_basedir) {// do not attempt to test or make directories outside of open_basedir$_make_new_dir = false;foreach ($_open_basedirs as $_open_basedir) {if (substr($_new_dir, 0, strlen($_open_basedir)) == $_open_basedir) {$_make_new_dir = true;break;}}} else {$_make_new_dir = true;}if ($_make_new_dir && !file_exists($_new_dir) && !@mkdir($_new_dir, $smarty->_dir_perms) && !is_dir($_new_dir)) {$smarty->trigger_error("problem creating directory '" . $_new_dir . "'");return false;}$_new_dir .= '/';}}}/* vim: set expandtab: */?>