Ъплоуд на графични файлове + рисайз

sizif

Registered
Здравейте!

Зная, че темата е повече от изтъркана като питане, но пък не оставам с впечатлението, че има достатъчно материали по нея, както тук, така и в другите бг-страници, в които ме прати гугъл.

Преди да поставя проблема, ще отбележа, че досега не съм се занимавал с подобни скриптове, а и се съмнявам, че скоро ще съм в състояние да напиша сам такъв, какъвто ми е нужен. Не съм и много наясно дали е по-добре скрипта за ъплоуд да е отделен от скрипта за рисайз, а и принципите, по-които се случват и двете са ми много неясни. Дали се използва ГД-библиотеката, кога, може ли без нея, как мога да копирам на хоста си едно изображение, но в различен формат, с по-малък размер в битове (ако надвишава зададения лимит) и пр.

Видях урока на staf за написване на клас за ъплоуд, но е преклаено сложен за мен (макар че откакто взех сам да си хаквам скриптовете взех да ставам параноик на тема сигурност).

От архива си изрових някакъв код (свалил съм го много отдавна и не зная откъде), който обаче не успях да подкарам. Доколкото мога да съдя по съдържанието и заглавието, което съм му сложил е за ъплоуд + рисайз.

Ето и кода:

<?
define ("MAX_SIZE","100");

define ("WIDTH","150");
define ("HEIGHT","100");

function make_thumb($img_name,$filename,$new_w,$new_h)
{
$ext=getExtension($img_name);

if(!strcmp("jpg",$ext) || !strcmp("jpeg",$ext))
$src_img=imagecreatefromjpeg($img_name);
if(!strcmp("png",$ext))
$src_img=imagecreatefrompng($img_name);

$old_x=imageSX($src_img);
$old_y=imageSY($src_img);

$ratio1=$old_x/$new_w;
$ratio2=$old_y/$new_h;
if($ratio1>$ratio2) {
$thumb_w=$new_w;
$thumb_h=$old_y/$ratio1;
}
else {
$thumb_h=$new_h;
$thumb_w=$old_x/$ratio2;
}

$dst_img=ImageCreateTrueColor($thumb_w,$thumb_h);

imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);

if(!strcmp("png",$ext))
imagepng($dst_img,$filename);
else
imagejpeg($dst_img,$filename);

imagedestroy($dst_img);
imagedestroy($src_img);
}

function getExtension($str) {
$i = strrpos($str,".");
if (!$i) { return ""; }
$l = strlen($str) - $i;
$ext = substr($str,$i+1,$l);
return $ext;
}

$errors=0;

if(isset($_POST['Submit']))
{

$image=$_FILES['image']['name'];

if ($image)
{

$filename = stripslashes($_FILES['image']['name']);

$extension = getExtension($filename);
$extension = strtolower($extension);

if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png"))
{
echo '<h1>Neizvestno razshirenie!</h1>';
$errors=1;
}
else
{


$size=getimagesize($_FILES['image']['tmp_name']);
$sizekb=filesize($_FILES['image']['tmp_name']);

if ($sizekb > MAX_SIZE*10240)
{
echo '<h1>Nadvishen e limityt za razmer!</h1>';
$errors=1;
}

$image_name=time().'.'.$extension;

$newname="/images/".$image_name;
$copied = copy($_FILES['image']['tmp_name'], $newname);

if (!$copied)
{
echo '<h1>Kopiraneto e neuspeshno!</h1>';
$errors=1;
}
else
{

$thumb_name='/images/thumbs/thumb_'.$image_name;
$thumb=make_thumb($newname,$thumb_name,WIDTH,HEIGHT);
}} }}


if(isset($_POST['Submit']) && !$errors)
{
echo "<h1>Malkoto kopie e syzdadeno uspeshno!</h1>";
echo '<img src="'.$thumb_name.'">';
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>PHP Създаване на малко копие</title>
</head>
<body>
<form name="newad" method="post" enctype="multipart/form-data" action="">
<table>
<tr><td><input type="file" name="image" ></td></tr>
<tr><td><input name="Submit" type="submit" value="Качи"></td></tr>
</table>
</form>
</body>
</html>


В този си вид ми дава грешка на 87-мия ред (отбелязал съм го в червено). Онова, което ме притеснява е че не зная дали имам инсталирана ГД-библиотека на хоста си. Ползвам индивидуалне пакет в топхост.бг, но не зная дали ГД-библиотеката е включена, евентуално откъде мога да я включа (или изтегля и инсталирам - как?).

Честно казано много въпроси станаха, но ако можете да подкарате скрипта и да ми кажете, какво е нужно за да проработи (а и изобщо как работи), ще ми помогнете значително.

Засега е това, макар че сигурно ще задавам още въпроси по темата.
Благодаря предварително!
 

Admin

Registered
За да не могат да качват нещо различно от картинки
може да проверяваш типа на файла:


$uploadname = $_FILES['file']['name'];
$uploadsize = $_FILES['file']['size'];
$uploadtype = $_FILES['file']['type'];

if ( $uploadtype =='image/jpeg' || $uploadtype=='image/jpg' )

{качваш}
else
{не качваш}
 

Slavei

Registered
admin каза:
За да не могат да качват нещо различно от картинки
може да проверяваш типа на файла:


$uploadname = $_FILES['file']['name'];
$uploadsize = $_FILES['file']['size'];
$uploadtype = $_FILES['file']['type'];

if ( $uploadtype =='image/jpeg' || $uploadtype=='image/jpg' )

{качваш}
else
{не качваш}

аз ли греша или миме тайпа на .jpg и .jpeg е един и същ?
и че за ИЕ трябва да сложи и проверка за "image/pjpeg"
 

Admin

Registered
Slavei каза:
admin каза:
За да не могат да качват нещо различно от картинки
може да проверяваш типа на файла:


$uploadname = $_FILES['file']['name'];
$uploadsize = $_FILES['file']['size'];
$uploadtype = $_FILES['file']['type'];

if ( $uploadtype =='image/jpeg' || $uploadtype=='image/jpg' )

{качваш}
else
{не качваш}

аз ли греша или миме тайпа на .jpg и .jpeg е един и същ?
и че за ИЕ трябва да сложи и проверка за "image/pjpeg"

Аз греша.

По скоро може да се направи проверка на

if ( $uploadtype =='image/jpeg' || $uploadtype=='image/gif' )

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

Горе