1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

upload

Тема в разделе "Web Coding", создана пользователем Slayter, 24 ноя 2007.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Slayter

    Slayter

    Регистр.:
    8 апр 2006
    Сообщения:
    232
    Симпатии:
    52
    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_exts0strlen($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'], 
                        
    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($to0strlen($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 $realname0644);
                                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'], 
                        
    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($to0strlen($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 $realname0644);
                            } 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
    ?>
     
    stanislv, Dez1 и pavloff нравится это.
  2. medvoodoo

    medvoodoo Постоялец

    Регистр.:
    28 мар 2007
    Сообщения:
    89
    Симпатии:
    19
    Несколько замечаний,если позволите:
    Вы это публикуете для народа или просто понтоваться? Скорее второе, пока этому скрипту место в корзине.
    $_SESSION['user_id'] - не нашел инициализации
    ABSPATH - где прописано?

    Возможно стоит дописать метод переопределения параметров. Перебирать код не стал, лениво :) но в пире есть уже море готовых решений :)
     
  3. Jeurey

    Jeurey

    Регистр.:
    13 сен 2006
    Сообщения:
    419
    Симпатии:
    576
    Сложно догадаться, что $_SESSION['user_id'] - признак ауентифицированного пользователя?

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

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

    medvoodoo Постоялец

    Регистр.:
    28 мар 2007
    Сообщения:
    89
    Симпатии:
    19
    Приношу свои извинения за грубость, больше не буду.

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

    RomAndry Постоялец

    Регистр.:
    21 ноя 2007
    Сообщения:
    102
    Симпатии:
    24
    поддерживаю medvoodoo.
    Я думаю не сложно просто добавить коментарии к коду, а замечание medvoodoo поможет тем же ньюбам не задавать сразу вопросов "пачему не работает?"
     
  6. Jeurey

    Jeurey

    Регистр.:
    13 сен 2006
    Сообщения:
    419
    Симпатии:
    576
    Ребятпа, раздел называется "PHP Pro" - о каки нубах вы говорите?

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