- Форма за ъплоуд
WT форуми -> PHP MySQL ASP.NET -> Форма за ъплоуд
Създайте нова тема Напишете отговор 
Автор Съобщение
kini
Нов
Нов

Регистриран на: 01/05/2010 12:36 pm

Support: 2
Bonus: 4
Мнения: 136
Мнение 02/04/2018 2:45 pm     Форма за ъплоуд Отговорете с цитат


Здравейте,

Имам следния скрипт, който използвам за качване на снимка към базата.

if (isset($_FILES['file']['tmp_name']))
    {
        $file       = $_FILES['file']['tmp_name'];
        $image      = addslashes(file_get_contents($_FILES['file']['tmp_name']));
        $img_name = addslashes($_FILES['file']['name']);

        move_uploaded_file($_FILES["file"]["tmp_name"],"uploads/avatar/" . $_FILES["file"]["name"]);
        $img_save ="uploads/avatar/" . $_FILES["file"]["name"];

   }


Вижда се, че е доста семпло и няма нищо особено..
Въпроса ми е, точно с този скрипт, как мога да огранича потребителя, да може да качва само снимки и нищо друго, защото с tag accept не се получи особено добре.

Възможно ли е да се добави и конвертиране в избран размер направо тук, а не като проверка, защото бих искал да запазя старата снимка, ако новата такава не е по изискванията на скрипта?

Поздрави.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 350
Bonus: 698
Мнения: 2644
Мнение 02/04/2018 2:53 pm      Отговорете с цитат


Може да ползваш finfo.

if (isset($_FILES['file']['tmp_name']))
{
        $file = $_FILES['file']['tmp_name'];

        //Тези за какво са?
        $image = addslashes(file_get_contents($_FILES['file']['tmp_name']));
        $img_name = addslashes($_FILES['file']['name']);

        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $mime_type = finfo_file($finfo, $file);
        if(in_array($mime_type, ['image/jpeg', 'image/png']) {
                move_uploaded_file($_FILES["file"]["tmp_name"],"uploads/avatar/" . $_FILES["file"]["name"]);
                $img_save ="uploads/avatar/" . $_FILES["file"]["name"];
        } else {
                //Не е картинка
        }
}


Относно второто ти питане, ако файла не отговаря на изисквания (към момента съм сложила само png & jpg форматите), просто няма да презапише файла (а ти ако някъде пазиш името на снимката например в дб) и не ъпдейтвай дб.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
kini
Нов
Нов

Регистриран на: 01/05/2010 12:36 pm

Support: 2
Bonus: 4
Мнения: 136
Мнение 02/04/2018 3:24 pm      Отговорете с цитат


Fakeheal написа:
Може да ползваш finfo.

if (isset($_FILES['file']['tmp_name']))
{
        $file = $_FILES['file']['tmp_name'];

        //Тези за какво са?
        $image = addslashes(file_get_contents($_FILES['file']['tmp_name']));
        $img_name = addslashes($_FILES['file']['name']);

        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $mime_type = finfo_file($finfo, $file);
        if(in_array($mime_type, ['image/jpeg', 'image/png']) {
                move_uploaded_file($_FILES["file"]["tmp_name"],"uploads/avatar/" . $_FILES["file"]["name"]);
                $img_save ="uploads/avatar/" . $_FILES["file"]["name"];
        } else {
                //Не е картинка
        }
}


Относно второто ти питане, ако файла не отговаря на изисквания (към момента съм сложила само png & jpg форматите), просто няма да презапише файла (а ти ако някъде пазиш името на снимката например в дб) и не ъпдейтвай дб.



Здравейте,

Благодаря за времето, което отделяте, за да ми обърнете внимание! Smile

Там където сте написали // Тези за какво са, опитвах се да направя така, че да се качват с различно име в папката, но не успях и съм ги забравил. Премахнати са.

В момента получавам една грешка, на линията, на която е in_array
Parse error: syntax error, unexpected '['
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 350
Bonus: 698
Мнения: 2644
Мнение 02/04/2018 3:26 pm      Отговорете с цитат


С каква версия на PHP си?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
deam0n
Tourist Defender

Регистриран на: 01/10/2005 6:33 pm

Support: 199
Bonus: 951
Мнения: 2967
Мнение 02/04/2018 3:27 pm      Отговорете с цитат


kini написа:
Fakeheal написа:
Може да ползваш finfo.

if (isset($_FILES['file']['tmp_name']))
{
        $file = $_FILES['file']['tmp_name'];

        //Тези за какво са?
        $image = addslashes(file_get_contents($_FILES['file']['tmp_name']));
        $img_name = addslashes($_FILES['file']['name']);

        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $mime_type = finfo_file($finfo, $file);
        if(in_array($mime_type, ['image/jpeg', 'image/png']) {
                move_uploaded_file($_FILES["file"]["tmp_name"],"uploads/avatar/" . $_FILES["file"]["name"]);
                $img_save ="uploads/avatar/" . $_FILES["file"]["name"];
        } else {
                //Не е картинка
        }
}


Относно второто ти питане, ако файла не отговаря на изисквания (към момента съм сложила само png & jpg форматите), просто няма да презапише файла (а ти ако някъде пазиш името на снимката например в дб) и не ъпдейтвай дб.



Здравейте,

Благодаря за времето, което отделяте, за да ми обърнете внимание! Smile

Там където сте написали // Тези за какво са, опитвах се да направя така, че да се качват с различно име в папката, но не успях и съм ги забравил. Премахнати са.

В момента получавам една грешка, на линията, на която е in_array
Parse error: syntax error, unexpected '['


Тази грешка която получаваш е защото си се по-стара версия на PHP-то.

този ред

if(in_array($mime_type, ['image/jpeg', 'image/png']) {


трябва да стане на

if(in_array($mime_type, array('image/jpeg', 'image/png'))) {



В по-новите версии на PHP (мисля че беше PHP 7 +) можеш да декларираш масиви с квадратни скоби:

$array = ['apple', 'banana'];


Последната промяна е направена от deam0n на 02/04/2018 3:47 pm; мнението е било променяно общо 1 път
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
kini
Нов
Нов

Регистриран на: 01/05/2010 12:36 pm

Support: 2
Bonus: 4
Мнения: 136
Мнение 02/04/2018 3:41 pm      Отговорете с цитат


И аз си го помислих, за това се опитах да търся решение в мрежата.

В момента версията е 5.2, само защото ми е по-удобно да работя на локалната машина, докато бъде завършена работата.

Промених и въпросния ред, както ми казахте, но сега излиза
Parse error: syntax error, unexpected '{'
Shocked
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
pix3l
Нов
Нов

Регистриран на: 08/10/2016 4:31 pm

Support: 5
Bonus: 10
Мнения: 136
Мнение 02/04/2018 3:44 pm      Отговорете с цитат


Най-вероятно си изпуснал скоба
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 350
Bonus: 698
Мнения: 2644
Мнение 02/04/2018 3:48 pm      Отговорете с цитат


За тази версия дори не знам дали finfo е включено в дефолтния билд.

5.4+ се изисква са краткия синтаксис на масивите Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
pix3l
Нов
Нов

Регистриран на: 08/10/2016 4:31 pm

Support: 5
Bonus: 10
Мнения: 136
Мнение 02/04/2018 3:51 pm      Отговорете с цитат


Според документацията не е... защо изобщо ползваш 5.2? Кой изобщо ползва 5.2 като цяло?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
kini
Нов
Нов

Регистриран на: 01/05/2010 12:36 pm

Support: 2
Bonus: 4
Мнения: 136
Мнение 02/04/2018 4:00 pm      Отговорете с цитат


pix3l написа:
Според документацията не е... защо изобщо ползваш 5.2? Кой изобщо ползва 5.2 като цяло?


Fakeheal написа:
За тази версия дори не знам дали finfo е включено в дефолтния билд.

5.4+ се изисква са краткия синтаксис на масивите Smile


Ъпгрейднах до последното обновяване на 5.6 (качено преди два дни), но все още не се получава. Замислям се, дали да не сменям целия скрипт, макар, че не ми трябва нищо по-дълго и излишно
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
pix3l
Нов
Нов

Регистриран на: 08/10/2016 4:31 pm

Support: 5
Bonus: 10
Мнения: 136
Мнение 02/04/2018 6:08 pm      Отговорете с цитат


Кое не се получава? Ако е грешката по-горе, сигурно си изпуснал скоба.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
Страница 1 от 1


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети