Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Грамотно загрузить картинку 
:(
    Опции темы
fakeman
Дата 11.6.2009, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



День добрый.
При регистрации есть такой код 
Код

    $name = $_FILES['pic']['name'];
    $tmp_name = $_FILES['pic']['tmp_name'];
    $type_name = $_FILES['pic']['type'];
    $size_name = $_FILES['pic']['size'];

if($submit)
{
.....
        if(!empty($name))
        {
            
            $valid_types = array('gif', 'jpg', 'png', 'jpeg', 'tmp');
            $ext = substr($name,1 + strrpos($name, '.'));
            if(!in_array($ext, $valid_types))
            {
                echo 'Невозможно загрузить <b>'.$name.'</b>, т.к. инициализировано <b>неизвестное</b> расширение файла. Допустимые расширения: <b>jpg, jpeg, gif, png</b>';
                exit();
            }
            preg_match('#image\/[x\-]*([a-z]+)#', $type_name, $filetype);
            switch ($filetype['1']) 
         {
                case 'jpeg':
                case 'pjpeg':
                case 'jpg': $type = '.jpg';break;
                case 'gif': $type = '.gif';break;
                case 'png': $type = '.png';break;
        case 'tmp': $type = '.tmp';break;
                default:
                    {
                       echo 'Невозможно...';
 exit();
                    }
            }
            $image = time().$type;
        if(!move_uploaded_file($_FILES['pic']['tmp_name'] ,getcwd().'/../avatars/'.$image))
        {
                echo 'Невозможно загрузить изображение <b>'.$name.'</b>, возможно произошла системная ошибка';
                exit();
        }
        else
        {    
            $location = "/phpsite/avatars/$image";
            $img = mysql_query ("UPDATE users SET img='$location' WHERE username='$login'");
        }
        }
}

Картинку он загружает кидает её на сервер вроде всё как надо, но вот как сделать что бы было ограничение на вес картинки там допустим 2мб и с размер картинки. допустим если уже при выводе картикни из базы писать <img src..  width=150px> картинка по ширине будет растягиваться как бы так и хотелось но если кто прикальнётся и закачает картинку с размерами 1x1000 :| то при отображении будет ужас.. Хотелось бы что бы было постоянный размер на ширину ну 150пх но в тоже время и ограничение на длинну(вроде как такое же на всяких фото сайтах есть), как решить такие проблемы. 

Это сообщение отредактировал(а) fakeman - 11.6.2009, 16:26
PM MAIL   Вверх
bars80080
Дата 11.6.2009, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



ну, вес у тебя здесь -     $size_name = $_FILES['pic']['size'];
можешь просто написать условие if(вес больше разрешённого) то ...

во-вторых, в качестве упреждения можно указать в форме <input type="hidden" name="MAX_FILE_SIZE" value="2000000" />



для контроля за размерами можно либо просто прочитать размеры сохранённого на сервере файла через getimagesize, либо просто воспользоваться такой функцией для приведения изображения к нужному формату (допустим обрезать)
PM MAIL WWW   Вверх
ZTI831
Дата 11.6.2009, 16:53 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 10.6.2009

Репутация: нет
Всего: нет



При возникновении трудностей в подобных задачах легче найти ответ в коде бесплатных движков. В VB помню нужная вам обработка встречалась.
PM   Вверх
fakeman
Дата 11.6.2009, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



bars80080, ну с весом картинки вроде разобрался
Код

if ($size_name > 1024*1024) 
{
echo "Объём файла больше 1mb";
}


что касаеться размера не разобрался :(

Но в процессе всего этого появился ещё вопрос, по поводу обновления картинки для юзера(Юзеру захотелось поменять себе картинку, заходит в настройки и там меняет старую на новую). Т.е. это получаеться у меня в базе храниться тока путь к картинки например /img/123.jpg и как мне сделать чтобы при нажатии изменить настройки он путь как бы не менял а картика обновлялась на новую и если юзер решит поменять формат картинки допустим на gif. Тогда как я понимаю надо в базе не тока путь держать но и название картинки 123 ? И получаеться куда девать старую картинку ? удалять ? если да то как ?

Добавлено @ 18:32
хотя просто при регистрации можно имя файла указывать не время(как у меня) а id(тока непонимаю как ведь его ещё нету юзер же тока региться) или имя юзера(оно не повторяеться фактически как и id дудет)? И удаление файла делается через такое ? unlink() 

Это сообщение отредактировал(а) fakeman - 11.6.2009, 18:39
PM MAIL   Вверх
bars80080
Дата 11.6.2009, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



если пути url и path различаются, то естественно надо держать и физический путь. старую удалять, если пользователю нельзя держать больше одной картинки (функция unlink(); )
PM MAIL WWW   Вверх
fakeman
Дата 11.6.2009, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



При регистрации сделал что бы картинке довалось имя юзера а при изменении картинки
Получилось такое
Код

$login = $editarr['username'];
if($name)
        {
            
            $valid_types = array('gif', 'jpg', 'png', 'jpeg', 'GIF', 'JPG', 'PNG', 'JPEG');
            $ext = substr($name,1 + strrpos($name, '.'));
            if(!in_array($ext, $valid_types))
            {
                echo 'Невозможно загрузить <b>'.$name.'</b>, т.к. инициализировано <b>неизвестное</b> расширение файла. Допустимые расширения: <b>jpg, jpeg, gif, png</b>';
                exit();
            }
            
            
                preg_match('#image\/[x\-]*([a-z]+)#', $type_name, $filetype);
                switch ($filetype['1']) 
                {
                    case 'jpeg':
                    case 'pjpeg':
                    case 'jpg': $type = '.jpg';break;
                    case 'gif': $type = '.gif';break;
                    case 'png': $type = '.png';break;
                    case 'tmp': $type = '.tmp';break;
                    default:
                        {
                           echo 'Невозможно...';
                            exit();
                        }
                }
                $image = $login.$type;
                
                //udaljaem file iz papki
                $filename = '/home/localhost/www/phpsite/avatars/'.$image;
                @unlink($filename); 

                move_uploaded_file($_FILES['pic']['tmp_name'] ,getcwd().'/avatars/'.$image);

                
                if ($size_name > 1024*1024) 
                {
                    echo 'Превышен объем файла';
                    exit;
                }
        }


прошу вас проверить и если что то может быть не так написать smile и со стороны безопасности.. 

П.С. при данном коде картинка обновляеться визуально тока после того как выйдеш, зайдёш под пругим юзером и обратно зайдёш под своим юзером тока тогда появиться картинка, каторую менял, как можно сделать что бы сразу обновилась не выходя из под юзера ? 

Это сообщение отредактировал(а) fakeman - 11.6.2009, 19:19
PM MAIL   Вверх
supervladislav
Дата 11.6.2009, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


///\\\///\\\///\\\
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 18.5.2006

Репутация: -8
Всего: -9



простите что суюсь ,но насколько я помню  opera  ie возвращают раздный mime тип 
PM MAIL   Вверх
fakeman
Дата 12.6.2009, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 5.5.2009

Репутация: нет
Всего: нет



Цитата(supervladislav @  11.6.2009,  23:55 Найти цитируемый пост)
простите что суюсь ,но насколько я помню  opera  ie возвращают раздный mime тип 

Всё нормально, даже приветствуется.
Ну в FF вроде всё чудно в IE всё плохо по этому поводу в Opere ещё не пробовал... как с таким бороться ?:(
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.