Класс Upload
Объект $Field:
Объект «Поле: загрузка файла»
Исходный код
class Upload extends Base { … }Свойства
$extensions
$Upload->extensions = '~\\.(\\w+)\\$~i';
Исходный код
    var $extensions = '~\\.(\\w+)\\$~i';
$upload_error
$Upload->upload_error
Исходный код
    var $upload_error;
Методы
request()
$Upload->request();
Получение значения поля
Исходный код
    function request() {
        $root = $this->root();
        $Main = $this->Main();
        $name = $this->name;
        if (!strlen($name)) return;
        if ($Page = $this->Page()) $this->value = $Page->get($name);
        if ($_POST || $_FILES) {
            if ($_FILE = $_FILES[$this->name]) {
                if ($_FILE['error'] == 0) {
                    if (!preg_match($this->extensions, $_FILE['name'], $m) || strpos($_FILE['name'], '.php') !== false) {
                        $this->upload_error = 'Недопустимый тип файла';
                    } else {
                        $folder = '/upload';
                        if (!is_dir("$root$folder")) {
                            @mkdir("$root$folder");
                            @chmod("$root$folder", 0777);
                        }
                        $tmp = $folder . '/' . sha1(uniqid(microtime()));
                        if (@move_uploaded_file($_FILE['tmp_name'], $root . $tmp)) {
                            @chmod("$root$tmp", 0666);
                            if ($a = @getimagesize($root . $tmp)) {
                                switch ($a[2]) {
                                    case IMAGETYPE_JPEG: $m[1] = 'jpg'; break;
                                    case IMAGETYPE_GIF: $m[1] = 'gif'; break;
                                    case IMAGETYPE_PNG: $m[1] = 'png'; break;
                                }
                            }
                            $value = $folder . '/' . sha1_file($root . $tmp) . '.' . $m[1];
                            if (!file_exists($root . $value)) {
                                if (@rename($root . $tmp, $root . $value)) {
                                    $this->value = $value;
                                } else {
                                    @unlink($root . $tmp);
                                    $this->upload_error = 'Ошибка загрузки файла';
                                }
                            } else {
                                @touch($root . $value);
                                $this->value = $value;
                            }
                        } else {
                            $this->upload_error = 'Ошибка загрузки файла';
                        }
                    }
                } elseif ($_FILE['error'] !== 4) {
                    $this->upload_error = 'Размер файла превышает допустимое значение';
                }
            }
        } elseif (!isset($this->value) && isset($this->default)) {
            $this->value = $this->default;
        }
    }
cleanup()
$Upload->cleanup();
Исходный код
    function cleanup() {
        $root = $this->root();
        if (strlen($this->value) && strpos('/' . $this->value . '/', '/../') === false && strpos($this->value, '.php') === false) {
            if (substr($this->value, 0, 8) === '/upload/') @unlink("$root{$this->value}");
            else @unlink($root . '/upload' . $this->value);
        }
    }
check()
$Upload->check();
Проверка правильности ввода
Возвращает: string|null
null
– успешная проверка;
string
– ошибка
Исходный код
    function check() {
        if ($this->upload_error) return $this->error = $this->upload_error;
        $e = parent::check();
        if (!empty($e)) return $e;
    }
text()
$Upload->text();
Исходный код
    function text() {
        if ($value = $this->value) {
            $this->value = $this->Main()->Request()->absoluteUrl($value);
            $r = parent::text();
            $this->value = $value;
        } else {
            $r = parent::text();
        }
        return $r;
    }
html()
$Upload->html();
Исходный код
    function html() {
        if ($value = $this->value) {
            $this->value = $this->Main()->Request()->absoluteUrl($value);
            $r = parent::html();
            $this->value = $value;
        } else {
            $r = parent::html();
        }
        return $r;
    }