Проблем с Thumb

critrate

Registered
Здравейте.Най-накрая успях да скалъпя някак си ъплоуд на изображение + създаване на тхъбм.Проблема е обаче,че при някои изображения дава грешки,просто все едно са повредени,но това е само при създаване на тхъмб,иначе при качване на оригинален размер няма никаква грешка работи си перфектно. + това не ми засича дали изображението е картинка или не,но не мога да видя къде греша :(.Ако може някой да погледне и да ме посъветва какво да направя ще съм много благодарен.

PHP:
if (isset($_POST['image'])) {
if($_FILES['pic']['tmp_name']){
if($_FILES['pic']['type'] == 'image/jpg' || $_FILES['pic']['type'] == 'image/jpeg' || $_FILES['pic']['type'] == 'image/png') {
if($_FILES['pic']['size'] <= 5242880) {
$ex = explode('.', $_FILES['pic']['name']);
$ab = count($ex) - 1;
$name = time().'.'.$ex[$ab];
$date = time();
if(move_uploaded_file($_FILES['pic']['tmp_name'] , '../images-upload/gallery/' .$name)) {
mysql_query("INSERT INTO gimages (original,album,date) VALUES ('$name','$album','$date')") or die (mysql_error());
echo "<br/>Sucsess";
echo "<br/><img src='../images-upload/gallery/thumb_$name'/><br/>";
function create_thumb($source,$max_width=200,$max_height=200) {
$ex = explode('.', $source);
$ab = count($ex) - 1;
$fl = '../images-upload/gallery/';
$new_name = 'thumb_'.basename($source);
if ($ex[$ab] == 'jpeg' || $ex[$ab] == 'jpg') {
$img = imagecreatefromjpeg($source);
}

if ($ex[$ab] == 'png'){
$img = imagecreatefrompng($source);
}

$width = imagesx($img);
$height = imagesy($img);

$new_width = $max_width/$width;
$new_height = $max_height/$height;
$new_resize = min($new_width, $new_height);
$width2 = intval($new_resize * $width);
$height2 = intval($new_resize * $height);

$tmp_img = imagecreatetruecolor($width2 , $height2);
imagecopyresized($tmp_img,$img,0,0,0,0,$width2,$height2,$width,$height);
imagejpeg($tmp_img, $fl.$new_name,100);
}
create_thumb('../images-upload/gallery/' .$name);
}
else {
echo "Error";
}
}
else {
echo "Изображението трябва да е по-малко";
}
}
else {
echo "<br/>Тва не е изображение бе бачка :S";
}
}
else {
echo "<Br/>Не те избрали изображение.";
}
}
 
Това не е целия код. И не е .. много удачно да използваш защита от типа на проверка само на MIME типа, преди качването на файла - може да бъде манипулирано. :) Ако искаш ми прати на ЛС адрес и ще правим експеримент , за да ти докажа.
 
Ticketa ми помогна за разширението и вече работи,а аз отрих защо не ми приема някои изображения.Просто не им открива $_FILES['pic']['tmp_name'] и не може да ги копира :( Ако някой знае как може да се оправи това,и защо вобще ми дава тази грешка ...
 
Ето ти примерен код, сигурен съм, че ще можеш да си го вградиш и сам, тъй като съм много изморен и ме болят очите за де чета.
Но ако все пак имаш затруднение ми драсни по Skype да ти помогна допълнително..

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>web-tourist: demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form enctype="multipart/form-data" method="POST" accept-charset="utf-8">
Image: <input name="pic" type="file"> <input type="submit" name="submit" value="Upload">
</form>
<?php
if (isset($_POST['submit']))
{
$pozvoleni = array("png", "jpg", "jpe", "jpeg", "gif", "bmp", "tif", "tiff" , "xbmp");
$file = $_FILES['pic']['name'];
$format = end(explode(".",$file));
if (in_array($format,$pozvoleni))
{
if (!is_dir("images/")) { mkdir("images/", 0777); }
if ($format == "png") { $mimetype = "image/png"; }
elseif ($format == "jpg" or $format == "jpeg" or $format == "jpe") { $mimetype = "image/jpeg"; }
elseif ($format == "gif") { $mimetype = "image/gif"; }
elseif ($format == "bmp") { $mimetype = "image/bmp"; }
elseif ($format == "tif" or $format == "tiff") { $mimetype = "image/tiff"; }
elseif ($format == "xbmp") { $mimetype = "image/x-xbitmap"; }
else { }
$name = "images/".md5($file).".$format";
move_uploaded_file($_FILES['pic']['tmp_name'], $name);
?>
Файлът е качен успешно.<br /><br />
<a href="<?php echo $name; ?>" target="_blank"><?php echo $name; ?></a><br /><br />
Mimetype: <?php echo $mimetype; ?>
<?php
}
else
{
echo "Непозволен формат.";
}
}
?>
</body>
</html>

Това направо е upload + преименуване на файлът.
А добавих xbmp и jpe тъй като в google потърсих какви са mimetype понеже на .tif изображенията не знаех mimetype какъв е и ги открих тук http://www.ltsw.se/knbase/internet/image.htp

И за това добавех тези 2те тъй като ги видях и там, макар да не съм срещал такива изображения и то най-вече xbmp, но ти ще си решиш какви формати да използваш.

Дано съм помогнал ;)
 
То всичко си работи,както и при моя след като го редактирах.Проблема е,че имам файлове,на които не може да прочете ['tmp_name'] и не знам защо е така
 
Вторият код който дадох на @critrate е този:

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>web-tourist: demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form enctype="multipart/form-data" method="POST" accept-charset="utf-8">
Image: <input name="pic" type="file"> <input type="submit" name="submit" value="Upload">
</form>
<?php
if (isset($_POST['submit']))
{
$pozvoleni = array("png", "jpg", "jpe", "jpeg", "gif", "bmp", "tif", "tiff" , "xbmp");
$pozvoleni2 = array("PNG", "JPG", "JPE", "JPEG", "GIF", "BMP", "TIF", "TIFF" , "XBMP");
$file = $_FILES['pic']['name'];
$format = end(explode(".",$file));
if (in_array($format,$pozvoleni) or in_array($format,$pozvoleni2))
{
if (!is_dir("images/")) { mkdir("images/", 0777); }
if ($format == "png" or $format == "PNG") { $mimetype = "image/png"; }
elseif ($format == "jpg" or $format == "jpeg" or $format == "jpe" or $format == "JPG" or $format == "JPEG" or $format == "JPE") { $mimetype = "image/jpeg"; }
elseif ($format == "gif" or $format == "GIF") { $mimetype = "image/gif"; }
elseif ($format == "bmp" or $format == "BMP") { $mimetype = "image/bmp"; }
elseif ($format == "tif" or $format == "tiff" or $format == "TIF" or $format == "TIFF") { $mimetype = "image/tiff"; }
elseif ($format == "xbmp" or $format == "XBMP") { $mimetype = "image/x-xbitmap"; }
else { }
$name = "images/".md5($file).".$format";
move_uploaded_file($_FILES['pic']['tmp_name'], $name);
?>
Файлът е качен успешно.<br /><br />
<a href="<?php echo $name; ?>" target="_blank"><?php echo $name; ?></a><br /><br />
Mimetype: <?php echo $mimetype; ?>
<?php
}
else
{
echo "Непозволен формат.";
}
}
?>
</body>
</html>

При мен работи безупречно, но при него не.
В този архив има 2 изображения, които той не успява да качи, а аз качвам без проблем ?

Архив: http://web-tourist.net/userfiles/5/4952.rar

Моля някой да изпробва скрипта който дадох по-горе и да пробва с тези 2 изображения и след това да каже дали са се качили.
Защото при него изписва , че са качени но всъщност не са.
Не мисля , че проблемът е от кода а по-скоро нещо от web сървъра или от операционната система (идея си нямам).
Много ще съм благодарен, а предполагам и @critrate ако някой изпробва скрипта с тези 2 изображения и каже какъв е резултатът..
Или ако някой знае от какво му се получава проблемът, нека сподели. ;)
 
Каква точно грешка му дава?

Да си разреши в php.ini качването на файлове по - големи от 2 мб, ако са прекалено големи.
 

Back
Горе