Функции для работы с файлами

Загрузка файла на сервер для modx

<?php
    function uploadFile($file){

        $max_size = $this->modx->config['uploadFile']* 1024;               # допустимый размер
        $ext_array = explode(',',$this->modx->getOption('upload_extension', null, '')); # допустимые расширения

        # создать уникальный путь для этого вида представления
        $uploadpath = 'assets/upload/'.$this->object->createdby.'/';

        # получить полный путь к уникальной папке
        $target_path = $this->modx->config['base_path'] . $uploadpath;

        # получить загруженные имена файлов:
        $submittedfiles = array_keys($_FILES);

        # цикл по файлам
        foreach ($submittedfiles as $sf) {

            # Получить файла и убедиться, что его хорошо.
            $filename = basename( $_FILES[$sf]['name'] );
            if(empty($filename)) {
                return $this->error('buorder_error_form_file_size');
            }

            # проверяем размер
            $sld_file_size = filesize($_FILES[$sf]['tmp_name']);
            if ($sld_file_size > $max_size) {
                return $this->error('buorder_error_form_file_size');
            }

            // Получить расширение файла
            $ext = pathinfo($filename, PATHINFO_EXTENSION);
            $ext = mb_strtolower($ext); // без учета регистра

            // это имя файла пустым (без файла загружены)
            if($filename == '') {
                return $this->error('buorder_error_form_problem');
            }

            // это правильный тип файла?
            if(!in_array($ext, $ext_array)) {
                return $this->error('buorder_error_form_problem');
            }

            // очистить имя файла и сделать уникальным
            $filename = $counter . '.' . $ext;
            $filename = str_replace(' ', '_', $filename); // пространства к подчеркивания
            $filename = date("Y-m-d_G-i-s_") . $filename; // Дата & время добавить

            // полный путь к новому файлу
            $myTarget = $target_path . $filename;

            # создать каталог, чтобы переместить файл, если он не существует
            if(!file_exists($target_path)) {
                if (!mkdir($target_path, 0755, true)) {
                    return $this->error('buorder_error_form_dir');
                }
            }

            // является файл перемещается в соответствующей папке успешно?
            if(move_uploaded_file($_FILES[$sf]['tmp_name'], $myTarget)) {
                $myFile = $uploadpath . $filename;
                if (!chmod($myTarget, 0644)) { /* some debug function*/ }

            } else {
                return $this->error('buorder_error_form_dir');
            }
        }
        if(!empty($filename)) {
            $this->object->files = $uploadpath.$filename;
        }
    }

Сканирует указанную папку

<?php
    function myscandir($dir)
    {
        $list = scandir($dir);
        unset($list[0],$list[1]);
        return array_values($list);
    }

    $dir = '/assets/';
    $data = myscandir($dir); // array

Удаляет файл и папки в указанной директории

<?php

    // требуется myscandir
    function clear_dir($dir)
    {
        $list = myscandir($dir);
        foreach ($list as $file)
        {
            if (is_dir($dir.$file))
            {
                clear_dir($dir.$file.'/');
                rmdir($dir.$file);
            }
            else
            {
                unlink($dir.$file);
            }
        }
    }

чистить директорию и все вложенные папки и файлы

<?php
   function clear_dir($dir = ''){
        $handle = opendir($dir);
            while(false !== ($folder = readdir($handle))){
            if ($folder == '.' or $folder == '..') continue;
                if (is_dir($dir.$folder)){
                    $this->clear_dir($dir.$folder."/");
                    rmdir($dir.$folder);
                }
            if (is_file($dir.$folder)){
                unlink($dir.$folder);
            }
        }
        closedir($handle);
    }


12 июня 2017, 16:46    18
Наверх