Ejemplo n.º 1
0
/**
 * Закачивает файлы в указанную папку
 *
 * @param string $dir
 * @return bool
 */
function download_files($dir = TEMP_FILE_PATH)
{
    if (isset($_POST['page']) && ($_POST['page'] == 'fm2' || $_POST['page'] == 'fmr')) {
        return;
    }
    // лог файлов
    global $files_log;
    //проверяем, нужно ли что-нить закачать
    if (empty($_FILES)) {
        $files_log['notice'][] = "There are no files to load...";
        return false;
    }
    //название темповой папки
    $temp_dirname = $dir . "/" . $_COOKIE[session_name()];
    path($temp_dirname);
    //создаем коневую папку
    if (!verifyDir($dir)) {
        return false;
    }
    //создаем временную папку для закачивания == названию сессии
    if (!verifyDir($temp_dirname)) {
        return false;
    }
    if (!is_file($temp_dirname . '/.htaccess')) {
        $handle = fopen($temp_dirname . '/.htaccess', 'w');
        fwrite($handle, 'Allow from all');
        fclose($handle);
    }
    $files = array();
    //определяем массив файлов для закачивания
    foreach ($_FILES as $name => $data) {
        if (is_array($data['name'])) {
            foreach ($data['name'] as $k => $v) {
                if (is_array($v)) {
                    foreach ($v as $name2 => $value) {
                        if (!empty($value)) {
                            if (array_key_exists($name2, $_POST[$name][$k])) {
                                $files[] = array('post' => &$_POST[$name][$k][$name2], 'name' => current($value), 'size' => current($data['size'][$k][$name2]), 'type' => current($data['type'][$k][$name2]), 'tmp_name' => current($data['tmp_name'][$k][$name2]), 'error' => current($data['error'][$k][$name2]), 'error_str' => file_uploder_error(current($data['error'][$k][$name2])));
                            } else {
                                if (count($data['size'][$k]) == 1) {
                                    $files[] = array('post' => &$_POST[$name][$k], 'name' => $value, 'size' => current($data['size'][$k]), 'type' => current($data['type'][$k]), 'tmp_name' => current($data['tmp_name'][$k]), 'error' => current($data['error'][$k]), 'error_str' => file_uploder_error(current($data['error'][$k])));
                                } else {
                                    $files[] = array('post' => &$_POST[$name][$k][$name2], 'name' => $value, 'size' => $data['size'][$k][$name2], 'type' => $data['type'][$k][$name2], 'tmp_name' => $data['tmp_name'][$k][$name2], 'error' => $data['error'][$k][$name2], 'error_str' => file_uploder_error($data['error'][$k][$name2]));
                                }
                            }
                        }
                    }
                } else {
                    $files[] = array('post' => &$_POST[$name][$k], 'name' => $data['name'][$k], 'size' => $data['size'][$k], 'type' => $data['type'][$k], 'tmp_name' => $data['tmp_name'][$k], 'error' => $data['error'][$k], 'error_str' => file_uploder_error($data['error'][$k]));
                }
            }
        } else {
            if (!empty($data['name'])) {
                $files[] = array('post' => &$_POST[$name], 'name' => $data['name'], 'size' => $data['size'], 'type' => $data['type'], 'tmp_name' => $data['tmp_name'], 'error' => $data['error'], 'error_str' => file_uploder_error($data['error']));
            }
        }
    }
    if (empty($files)) {
        $files_log['fatal'][] = "There are no files to load...";
        return false;
    }
    //закачиваем
    foreach ($files as $k => $v) {
        if ($v['error'] == 0) {
            $files[$k]['path'] = file_getUniName($temp_dirname . "/" . GetPureName($v['name']));
            //проверяем на совпадение имен файла в кэше
            if (!move_uploaded_file($v['tmp_name'], $files[$k]['path'])) {
                unset($files[$k]['path']);
                $files_log['warning'][] = "Cann't upload the file '" . $v['name'] . "' in function 'move_uploaded_file'";
            } else {
                chmod($files[$k]['path'], FILES_MOD);
                chown($files[$k]['path'], fileowner($_SERVER['SCRIPT_FILENAME']));
                chgrp($files[$k]['path'], filegroup($_SERVER['SCRIPT_FILENAME']));
                //возвращаем пути на файлы в указанной папке
                $files[$k]['post'] = "@temp" . $files[$k]['path'];
            }
        }
    }
    $_FILES = null;
    return true;
}
Ejemplo n.º 2
0
 /**
  * проверяет массив файлов и ресайзит их
  *
  * @param array() $fld
  * @param class $parent
  */
 function putFiles(&$fld, &$parent)
 {
     $main_root_id = defined('MAIN_ROOT_ID') ? MAIN_ROOT_ID : 100;
     $root_id = domainRootId();
     $module =& Registry::get('T' . $parent->name);
     $selector = $module ? (bool) $module->selector : true;
     foreach ($parent->elem_fields['columns'] as $k => $v) {
         if (($v['type'] == 'input_image' || $v['type'] == 'input_file') && !empty($fld[$k])) {
             if (substr($fld[$k], 0, 5) == '@temp') {
                 //перекладываем папку в нужную директорию
                 //определяем директорию использую id и folder для филда или общую
                 $source_file = substr($fld[$k], 5);
                 /*// пока закомментировала создание подпапок root_id, т.к. хотим от них отказаться
                   // позже введем какие-нибудь настройки
                    * if ($main_root_id == $root_id || !$selector) {
                       $folder = FILES_DIR;
                   }
                   else {
                       $folder = FILES_DIR . $root_id . '/';
                       if (!is_dir($folder)) {
                           mkdir($folder);
                           chmod($folder, DIRS_MOD);
                       }
                   }*/
                 $folder = FILES_DIR;
                 if (isset($v['display']['folder'])) {
                     $folder .= $v['folder'] . '/';
                     //Директория для закачивания собственная
                 } elseif ($parent->elem_fields['folder']) {
                     $folder .= $parent->elem_fields['folder'] . '/';
                     //Директория для закачивания глобальная
                 }
                 verifyDir($folder);
                 $id = get('id', '0', 'p');
                 $is_fancy = get('is_fancy', '', 'gp');
                 if ($is_fancy) {
                     $id = get('pid', '0', 'gp');
                 }
                 //иногда почему-то теряется id :)
                 if (is_array($id)) {
                     $id = $_POST['fld']['id'];
                 }
                 //@todo сделать проверку, что объект создан и id!=0 иначе как-нить раскладывать в другие папкив таких случаях,
                 //можно оставлять где попало и всо второго раза все будет ок..но тоже тупо:)
                 if ($id) {
                     $folder .= $id;
                 }
                 verifyDir($folder);
                 $dest_file = $folder . '/' . basename($source_file);
                 $dest_file = file_getUniName(path($dest_file));
                 //перемещаем
                 rename($source_file, $dest_file);
                 /*
                 copy($source_file, $dest_file);
                 unlink($source_file);
                 */
                 $fld[$k] = substr($dest_file, 2);
             } elseif ($fld[$k] == FILE_NO_SELECT_STR) {
                 $fld[$k] = "";
             }
         }
     }
 }