Загрузка изображения php (warning)

Статус
Закрыто для дальнейших ответов.

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
имеется картинка 1.jpg, а человек взял и заменил её на 1.gif или наоборот, то при загрузке у меня вылезают варнинги:
Код:
Warning: imagecreatefromgif() [function.imagecreatefromgif]: 'C:\Users\Admin\AppData\Local\Temp\phpAFD4.tmp' is not a valid GIF file in D:\VertrigoServ\www\site.ru\function.conf on line 2028
Warning: imagesx() expects parameter 1 to be resource, boolean given in D:\VertrigoServ\www\site.ru\function.conf on line 2033
На строке 2028:
Код:
$src = imagecreatefromgif($file['tmp_name']);
На строке 2033:
Код:
$src_x = imagesx($src);
Ну и там ещё куча варнингов ниже по ресайзу.. Вобщем изображение не грузится.. Если же этот .gif и .jpg не подменять, то загрузка нормально идет без варнингов.
Как это можно исправить?
 

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
Дык а чему ты удивляешься? Переименуй *.docx в *.xlsx, и посмотри куда тебя пошлет Эксель) От изменения названия гифка не станет валидной жипегой и наоборот, ты б еще *.bmp переименовывал :) Потому и ворнинги лезут. Отлавливай ошибки и бей юзверей по рукам, пусть по-человечески конвертируют изображения. То, что просмотрщики на компе еще могут схавать такой переименованный файл, нифига не значит, что его съест скрипт.
 

brevis

Well-Known Member
Регистрация
10.08.2010
Сообщения
452
картинка 1.jpg, а человек взял и заменил её на 1.gif или наоборот
Читай тип изображения скажем через exif_imagetype() и потом открывай его правильной функцией:

Код:
$_ = exif_imagetype( $file['tmp_name'] );
if ( $_ == IMAGETYPE_JPEG )
{
$src = imagecreatefromjpeg( $file['tmp_name'] );
}
elseif ( $_ == IMAGETYPE_GIF )
{
$src = imagecreatefromgif( $file['tmp_name'] );
}
elseif ( $_ == IMAGETYPE_PNG )
{
$src = imagecreatefrompng( $file['tmp_name'] );
}
else
{
// а-на-на юзеру по попе
// (показываем сообщение "ваша фоточка говно")
}
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
картинка 1.jpg, а человек взял и заменил её на 1.gif или наоборот
Читай тип изображения скажем через exif_imagetype() и потом открывай его правильной функцией:

Код:
$_ = exif_imagetype( $file['tmp_name'] );
if ( $_ == IMAGETYPE_JPEG )
{
$src = imagecreatefromjpeg( $file['tmp_name'] );
}
elseif ( $_ == IMAGETYPE_GIF )
{
$src = imagecreatefromgif( $file['tmp_name'] );
}
elseif ( $_ == IMAGETYPE_PNG )
{
$src = imagecreatefrompng( $file['tmp_name'] );
}
else
{
// а-на-на юзеру по попе
// (показываем сообщение "ваша фоточка говно")
}
А какая между этим разница?
Код:
if($file['type'] == 'image/jpeg' || $file['type'] == 'image/jpg' || $file['type'] == 'image/pjpeg') {
$type = '.jpg';
$src = imagecreatefromjpeg($file['tmp_name']);
}
elseif($file['type'] == 'image/png') {
$type = '.png';
$src = imagecreatefrompng($file['tmp_name']);
}
elseif($file['type'] == 'image/gif') {
$type = '.gif';
$src = imagecreatefromgif($file['tmp_name']);
}
else {
return false;
}
т.е между exif_imagetype( $file['tmp_name'] ) и $file['type']?
 

brevis

Well-Known Member
Регистрация
10.08.2010
Сообщения
452
А почитать в докуметации?

...exif_imagetype() считывает начальные байты изображения и проверяет их сигнатуру...
$_FILES['userfile']['type']
Mime-тип файла, в случае, если браузер предоставил такую информацию. Пример: "image/gif". Этот mime-тип не проверяется в PHP, так что не полагайтесь на его значение без проверки.
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
А почитать в докуметации?

...exif_imagetype() считывает начальные байты изображения и проверяет их сигнатуру...
$_FILES['userfile']['type']
Mime-тип файла, в случае, если браузер предоставил такую информацию. Пример: "image/gif". Этот mime-тип не проверяется в PHP, так что не полагайтесь на его значение без проверки.
Усёк :)
А как обновить версию php на vps на убунте? А то эта функция у меня не работает :(
Код:
Fatal error: Call to undefined function exif_imagetype() in \home\my_site\function.conf on line 2018
 

brevis

Well-Known Member
Регистрация
10.08.2010
Сообщения
452
http://php.net/manual/ru/exif.installation.php

Но также можно юзать альтернативу -- getimagesize().
 

ArhAngel

Well-Known Member
Регистрация
07.05.2011
Сообщения
378
Так-же как и локальном компе
Для начала нужен доступ в консоль по ssh при чем под root-ом

дальше команды в порядке очереди

Код:
add-apt-repository ppa:ondrej/php5
apt-get update
sudo apt-get install php5
Это для 12.04 LTS

Кстате это будет php5.4
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Так-же как и локальном компе
Для начала нужен доступ в консоль по ssh при чем под root-ом

дальше команды в порядке очереди

Код:
add-apt-repository ppa:ondrej/php5
apt-get update
sudo apt-get install php5
Это для 12.04 LTS

Кстате это будет php5.4
Что значит слово "ondrej"? Я этот вариант находил на просторах инете, но что-то мне это слово не понравилось и не стал юзать гг
 

ArhAngel

Well-Known Member
Регистрация
07.05.2011
Сообщения
378
brevis, - там под винду, а сборкой php на удаленном сервере лучше не заниматься, проще поставить уже собранную проверенную сборку, которая доступна из репозиториев

Так-же как и локальном компе
Для начала нужен доступ в консоль по ssh при чем под root-ом

дальше команды в порядке очереди

Код:
add-apt-repository ppa:ondrej/php5
apt-get update
sudo apt-get install php5
Это для 12.04 LTS

Кстате это будет php5.4
Что значит слово "ondrej"? Я этот вариант находил на просторах инете, но что-то мне это слово не понравилось и не стал юзать гг
Это значит что вы добавляете репозиторий новый, на котором есть сборка - все проверено, наботает. Кстате если у вас стоял например php5.1 и там используется функция mysql_escape_string, то выскочат нотисы по поводу того, что в новых версиях php используется вместо этой функция mysql_real_escape_string() - но это не смертельно.
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Это значит что вы добавляете репозиторий новый, на котором есть сборка - все проверено, наботает. Кстате если у вас стоял например php5.1 и там используется функция mysql_escape_string, то выскочат нотисы по поводу того, что в новых версиях php используется вместо этой функция mysql_real_escape_string() - но это не смертельно.
-bash: add-apt-repository: command not found
Нету такой :/ Что делать?
 

ArhAngel

Well-Known Member
Регистрация
07.05.2011
Сообщения
378
какая версия оси?

можете вместо первой команды ввести в консоли
Код:
nano /etc/apt/sources.list
и добавить нужный репозиторий вручную

nano (консольный редактор текста) может быть не установлен, если так, то
Код:
apt-get install nano
http://proubuntu.com.ua/2012/04/18/php-5-4-0.html - вот нашел описание под 10-ю убунту
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
какая версия оси?

можете вместо первой команды ввести в консоли
Код:
nano /etc/apt/sources.list
и добавить нужный репозиторий вручную

nano (консольный редактор текста) может быть не установлен, если так, то
Код:
apt-get install nano
http://proubuntu.com.../php-5-4-0.html - вот нашел описание под 10-ю убунту
Ubuntu 10.04.4 LTS
apt-get install nano
Reading package lists... Done
Building dependency tree
Reading state information... Done
nano is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
Но обнова один фиг не работает :( Хотя htop нормально установился недавно..
 

ArhAngel

Well-Known Member
Регистрация
07.05.2011
Сообщения
378
По ссылке все хороше расказано)) там через echo все, я больше через nano люблю. Nano уже установлен
 

rhamdeew

Well-Known Member
Регистрация
12.04.2012
Сообщения
57
Что значит слово "ondrej"? Я этот вариант находил на просторах инете, но что-то мне это слово не понравилось и не стал юзать гг
Ник человека который собрал данный пакет.
А что, стандартный вариант установки уже не канает? Вообще, не старайтесь поставить как можно больше модулей php, пусть будут только те которые реально нужны на проекте.
Список установленных модулей можете посмотреть в консоли: php -m (при условии что установлен php5-cli)
Сам для картинок пользуюсь php5-imagick:
Код:
sudo apt-get install php5-imagick
FIReFoX: nano is already the newest version.
он уже установлен у вас, не запаривайтесь )
 
Статус
Закрыто для дальнейших ответов.
Верх Низ