Он включает одну единственную функцию - создание иерархии папок на сайте.
Функция make_dir() должна принимать массив в виде, который выдает нам функция directory_map() (если ей кто-нибудь хоть раз пользовался), либо текст с путем до папки, которая должна быть создана (причем папки, которые содержат данную папку тоже могут не существовать). Как раз последняя фича (я про ввод пути до папки) и не работает. Пишет, что не хватает памяти, но я думаю, что это я дурак, что-то там накосячил.
Гляньте, товарищи, я никак ошибку не могу найти. Я по-максимуму закомментил, если что - спрашивайте.
Кстати, с массивом работает как часы.
- Код: Выделить всё
<?php
/*
| Функция конвертирования из массива в ассоциативный массив
_______________________________________________________________
| $arr - array, состоящий из названия папок вида:
|
| $arr[номер_подпапки] = 'имя_подпапки';
|
| $i = номер текущего индекса массива (или уровня подпапки)
*/
function make_array($arr, $i=1)
{
// Назначаем переменную
$result = array();
// Если $arr[номер_подпапки] задано, то
if (isset($arr[$i]))
{
// Создаем новый элемент массива, который будет равен результату следующего витка функции
$result[$arr[$i]] = make_array($arr, $i++); // Здесь возникает ошибка Allowed memory size of 8388608 bytes exhausted (tried to allocate 120 bytes) in Sites/system/application/helpers/MY_directory_helper.php on line 8
return $result;
}
return '';
}
/*
| Функция создания иерархии папок
_______________________________________________________________
| $data - array, состоящий из названия папок вида:
|
| $data = array(
| 'имя_папки'=> array(
| 'имя_подпапки' => array (
| 'имя_последней_подпапки' => '',
| 'имя_еще_одной_последней_подпапки' => ''
| )
| )
| );
|
| (В проекте) Так же $data может быть string, превращающийся
| в массив после разбиения с помощью split();
|
| $main_folder - string, задающий начало иерархии вида:
|
| ./имя_папки/имя_подпапки/так/далее...
|
| по умолчанию './', т.е. корневой каталог CI
| все пути расчитываются от него
|
| $rule - int, задающий права доступа для всех каталогов
*/
function make_dir($data, $main_folder = './', $rule = 0777)
{
// Если последняя папка в ветви
if ($data == '')
{
// Возвратить ПРАВДА
return true;
}
// Если текст
elseif (is_string($data))
{
// Применяем защиту от дурака
$data = trim($data);
$data = strip_tags($data);
// Делим на массив
$path = split("/", $data);
// Создаем массив для передачи в переменную
$data = make_array($path);
// Перенаправляем данные обратно в функцию
return make_dir($data, $main_folder, $rule);
}
// Если массив
elseif (is_array($data))
{
// Записываем все имена элементов массива в массив
$folder_names = array_keys($data);
// Для каждого элемента массива берем его название
foreach ($folder_names as $folder_name)
{
// Если каталог еще не существует
if (!is_dir($main_folder.$folder_name.'/'))
{
// То создаем его
mkdir($main_folder.$folder_name.'/', $rule);
}
// Если элемент является массивом
if (is_array($data[$folder_name]))
{
// Создаем переменную пути
$to_folder = $main_folder.$folder_name.'/';
// Передаем оставшийся массив, путь и роли обратно в функцию
make_dir($data[$folder_name], $to_folder, $rule);
}
}
// Возвратить ПРАВДА
return true;
}
// Возвратить ЛОЖЬ
return false;
}
/* End of file MY_directory_helper.php */
/* Location: ./system/application/helpers/MY_directory_helper.php */
