Форма за ъплоуд

kini

Registered
Здравейте,

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

Код:
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 не се получи особено добре.

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

Поздрави.
 
Може да ползваш 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 форматите), просто няма да презапише файла (а ти ако някъде пазиш името на снимката например в дб) и не ъпдейтвай дб.
 
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 форматите), просто няма да презапише файла (а ти ако някъде пазиш името на снимката например в дб) и не ъпдейтвай дб.


Здравейте,

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

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

В момента получавам една грешка, на линията, на която е in_array
Код:
Parse error: syntax error, unexpected '['
 
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 форматите), просто няма да презапише файла (а ти ако някъде пазиш името на снимката например в дб) и не ъпдейтвай дб.


Здравейте,

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

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

В момента получавам една грешка, на линията, на която е 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'];
 
И аз си го помислих, за това се опитах да търся решение в мрежата.

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

Промених и въпросния ред, както ми казахте, но сега излиза
Код:
Parse error: syntax error, unexpected '{'
:shock:
 
Според документацията не е... защо изобщо ползваш 5.2? Кой изобщо ползва 5.2 като цяло?
 
pix3l каза:
Според документацията не е... защо изобщо ползваш 5.2? Кой изобщо ползва 5.2 като цяло?

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

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

Ъпгрейднах до последното обновяване на 5.6 (качено преди два дни), но все още не се получава. Замислям се, дали да не сменям целия скрипт, макар, че не ми трябва нищо по-дълго и излишно
 
Кое не се получава? Ако е грешката по-горе, сигурно си изпуснал скоба.
 

Горе