upload

Статус
В этой теме нельзя размещать новые ответы.

Slayter

Гуру форума
Регистрация
8 Апр 2006
Сообщения
231
Реакции
55
PHP:
<?php
class upload {
    
    private $extensions      = array("jpg","jpeg","gif","png","rar","zip","7z","doc","pdf","rtf","xls","tmpl","ex4","mq4","htm","html","exe"); // список разрешенных для загрузки расширений
    
    private $img_extensions = array("jpg","jpeg", "gif");    
    private $def_img_width  = 468; // Px
    private $def_img_height = 60;  // Px
    private $def_img_size   = 100;  // Kilobytes
    private $allowed_img_exts = '';
    private $allowed_exts     = '';
    private $to     = ''; // если хотите тут указать папку для загрузки удалите строку 26
    private $size   = 5;  // максимальный размер загружаемого файла в мегабайтах
    public  $errors;
    
    function __construct() {
        $this->def_img_size = $this->def_img_size * 1024; // в килобайтах
        $this->size = $this->size * 1024 *1024; // теперь в мегабайтах
        foreach ($this->extensions as $value) {
            $this->allowed_exts .= $value . ', ';
        }
        foreach ($this->img_extensions as $value) {
            $this->allowed_img_exts .= $value . ', ';
        }
        $this->allowed_exts = substr($this->allowed_exts, 0, strlen($this->allowed_exts) - 2);
        $this->to     = ABSPATH . 'uploads/';
        if (isset($_SESSION['user_id'])) {
            $this->img_to = ABSPATH . 'uploads/users/' . $_SESSION['user_id'];
        }
    }
    
    public function send_img($fieldname = 'userfile',$to = null) {
        if (isset($_FILES[$fieldname])) {
            if (is_uploaded_file($_FILES[$fieldname]['tmp_name'])) {
                $filename = $_FILES[$fieldname]['tmp_name'];
                $realname = $_FILES[$fieldname]['name'];
                $ext = substr($_FILES[$fieldname]['name'], 
                    1 + strrpos($_FILES[$fieldname]['name'], "."));
                if (filesize($_FILES[$fieldname]['tmp_name']) > $this->def_img_size) {
                    $this->errors[] = '<div class="errorwrap">Размер файла более ' . $this->def_img_size / 1024 . 'Kb.</div>';
                } elseif (!in_array($ext, $this->img_extensions)) {
                    $this->errors[] = '<div class="errorwrap">Недопустимое расширение файла (<b>' . $ext . '</b>).<br />Расширение должно быть в списке: ' . $this->allowed_img_exts . '.<br />Этот список можно отредактировать на 4й строке файла ' . __FILE__ . '</div>';
                } else {
                     if (empty($to)) {
                         $to = $this->img_to;
                     } else {
                         if (!is_dir($to)) {
                             mkdir(substr($to, 0, strlen($to) - 1), 0755) or die($this->errors[] = '<div class="errorwrap">Невозможно создать папку: ' . $to . '.</div>');
                         }
                     }
                     $prefix = '';
                     if (is_file($to . $realname)) {
                         rename($to . $realname, $to . time() . '_-_' . $realname);
                         //$prefix = time();
                         
                     }
                    
                         if (@move_uploaded_file($filename, $to . $prefix . $realname)) {
                            chmod($to . $prefix . $realname, 0644);
                            if (!getimagesize($to . $prefix . $realname)) {
                                $this->errors[] = '<div class="errorwrap">Вы пытаетесь загрузить не картинку!</div>';
                            } else {
                                $size = getimagesize($to . $prefix . $realname);
                                if ($size[0] > $this->def_img_width || $size[1] > $this->def_img_height) {
                                    $this->errors[] = '<div class="errorwrap">Вы пытаетесь загрузить слишком большое изображение!
                                     Максимальная ширина <b>' . $this->def_img_width . '</b>Px, а высота
                                     <b>' . $this->def_img_height . '</b>Px.
                                     Ваша картинка имеет ширину <b>' . $size[0] . '</b>Px и высоту <b>' . $size[1] . '</b>Px.
                                     </div>';
                                    unlink($to . $prefix . $realname);
                                }
                            }
                        } else {
                            $this->errors[] = '<div class="errorwrap">Невозможно переместить файл, проверьте права на доступ к папке ' . $to . '.</div>';
                        }
                }
            } else {
                $this->errors[] = '<div class="errorwrap">Вы пытаетесь загрузить пустой файл</div>';
            }
        } else {
            $this->errors[] = '<div class="errorwrap">Загрузка файла невозможна</div>';
        }
    }
    
    public function send_file($fieldname = 'userfile', $to = null) {
        if (isset($_FILES[$fieldname])) {
            if (is_uploaded_file($_FILES[$fieldname]['tmp_name'])) {
                $filename = $_FILES[$fieldname]['tmp_name'];
                $realname = $_FILES[$fieldname]['name'];
                $ext = substr($_FILES[$fieldname]['name'], 
                    1 + strrpos($_FILES[$fieldname]['name'], "."));
                if (filesize($_FILES[$fieldname]['tmp_name']) > $this->size) {
                    $this->errors[] = '<div class="errorwrap">Размер файла более ' . $this->size / pow(1024,2) . 'Mb.</div>';
                } elseif (!in_array($ext, $this->extensions)) {
                    $this->errors[] = '<div class="errorwrap">Недопустимое расширение файла (<b>' . $ext . '</b>).<br />Расширение должно быть в списке: ' . $this->allowed_exts . '.<br />Этот список можно отредактировать на 4й строке файла ' . __FILE__ . '</div>';
                } else {
                     if (empty($to)) {
                         $to = $this->to;
                     } else {
                         if (!is_dir($to)) {
                             mkdir(substr($to, 0, strlen($to) - 1), 0755) or die($this->errors[] = '<div class="errorwrap">Невозможно создать папку: ' . $to . '.</div>');
                         }
                     }
                     
                     if (is_file($to . $realname)) {
                         rename($to . $realname, $to . time() . '_-_' . $realname);
                         //$prefix = time();
                         $prefix = '';
                     }
                    
                         if (@move_uploaded_file($filename, $to . $prefix . $realname)) {
                            chmod($to . $prefix . $realname, 0644);
                        } else {
                            $this->errors[] = '<div class="errorwrap">Невозможно переместить файл, проверьте права на доступ к папке ' . $to . '.</div>';
                        }
                }
            } else {
                $this->errors[] = '<div class="errorwrap">Вы пытаетесь загрузить пустой файл</div>';
            }
        } else {
            $this->errors[] = '<div class="errorwrap">Загрузка файла невозможна</div>';
        }
        
        
    }
    
}
?>

Запуск скрипта:
PHP:
<?php
$upload = new upload();
$upload->send_file('myfile','/home/httpd/www/uploads/'); // "myfile" - name of form field with file
?>
 
Несколько замечаний,если позволите:
Вы это публикуете для народа или просто понтоваться? Скорее второе, пока этому скрипту место в корзине.
$_SESSION['user_id'] - не нашел инициализации
ABSPATH - где прописано?

Возможно стоит дописать метод переопределения параметров. Перебирать код не стал, лениво :) но в пире есть уже море готовых решений :)
 
Сложно догадаться, что $_SESSION['user_id'] - признак ауентифицированного пользователя?

И что ABSPATH - абсолютный путь, который устанавливается индивидуально?

Еще одна подобная выходка - лишишься права не то, чтобы писать - смотреть данный раздел.
 
Приношу свои извинения за грубость, больше не буду.

Jeurey, вы знаете сложно. Т.е. любой профессиональный программист разберется без проблем, но и любой проф программист напишет заточенный под себя класс, не парясь с исправлениями сессий и констант а так же с исправлением шаблонов, а нюбу будет непонятно, он скопирует класс, скопирует пример, увидит что куча ошибок, коментариев нет, какой смысл в публикации подобных вещей?
Если хотите можите банить :confused:
 
поддерживаю medvoodoo.
Я думаю не сложно просто добавить коментарии к коду, а замечание medvoodoo поможет тем же ньюбам не задавать сразу вопросов "пачему не работает?"
 
Ребятпа, раздел называется "PHP Pro" - о каки нубах вы говорите?

Вообщем. Я смотрю, не все читают правила подфорума. Еще один флеймовый топик - начну злиться :-]
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху