2012-05-06 5 views
1

У меня есть сценарий загрузки нескольких изображений, он изменяет размеры изображений и создает миниатюру. по некоторым нечетным причинам некоторые изображения не идут, хотя. в этом случае размер изображения мал, и это файл типа JPEG. по какой-то причине это не проходит. он отлично работает с другими изображениями. Я использую один и тот же сценарий для отдельных файлов, и он загружает этот файл изображения. пожалуйста помоги! благодаря!php multi image upload script не загружает некоторые файлы изображений

<?php require_once("../includes/connection.php"); ?> 
<?php require_once("../includes/functions.php"); ?> 
<?php 
$albumName = $_GET['album']; 
$albumDate = $_GET['date']; 
$albumId = $_GET['id']; 
$upload_path = "/home/elevat17/public_html/images/gallery/"; //location 
$images = $_FILES['userFile']['name']; 
$temps = $_FILES['userFile']['tmp_name']; 
$types = $_FILES['userFile']['type']; 
$errors = $_FILES["userFile"]["error"]; 
if ($_FILES["userFile"]["name"]=="") {echo "You must choose a file to upload!";} 
if(in_array("", $images)) {die('Select an image to upload.');} 


else 

{ 
for ($n=0; isset($images[$n]) && isset($temps[$n]) && isset($types[$n]) && isset($errors[$n]); $n++) { 
if ((($types[$n] == "image/gif") 

|| ($types[$n] == "image/jpeg") 

|| ($types[$n] == "image/pjpeg") 

|| ($types[$n] == "image/png") 

|| ($types[$n] == "image/jpg") 

|| ($types[$n] == "image/x-png"))) 


{ 

if ($errors[$n] > 0) 

{ 

$content = "Return Code: " . $errors[$n] . "<br />"; 

} 

else 

{ 

$content = "Upload: " . $images[$n] . "<br />"; 

$content = "Type: " . $types[$n] . "<br />"; 

$content = "<br/><br/>"; 



if (file_exists($upload_path . $images[$n])) 

{ 

die($images[$n].' already exists. Upload cancelled!'); 

} 

else 

{ 

$uploadedfile = $temps[$n]; 

$image = $images[$n]; 

$size = getimagesize($uploadedfile); 

$type = $size['mime']; 

$width = $size[0]; 

$height = $size[1]; 

if($height > '900' || $width > '600') 

{ 

$newwidth=600; // NEW WIDTH 

$newheight=($height/$width)*$newwidth; 

$tmp=imagecreatetruecolor($newwidth,$newheight); 

$filename = $upload_path.$image; 



if($size[2] == IMAGETYPE_GIF) 

    { 

     $src = imagecreatefromgif($uploadedfile); 

     imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height); 

     imagegif($tmp,$filename,100); 

    } 

elseif($size[2] == IMAGETYPE_JPEG) 

    { 

     $src = imagecreatefromjpeg($uploadedfile); 

     imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height); 

     imagejpeg($tmp,$filename,100); 

    } 

elseif($size[2] == IMAGETYPE_PNG) 

    { 

     $src = imagecreatefrompng($uploadedfile); 

     imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height); 

     imagepng($tmp,$filename,9); 

    } 
crop_img(75,75); 
move_uploaded_file($uploadedfile, $filename); 
imagedestroy($src); 

imagedestroy($tmp); 

} 

else 

{  




} 
$query = "INSERT INTO photos (photo_name, in_album) VALUES ('{$image}', $albumId)"; 
      if (mysql_query($query)) {header("location: edit_album.php?id={$albumId}");} 




} 

} 

} 

else { $content  = "Invalid file"; } 

} 

} 

?> 
<?php require("../includes/footer.php"); ?> 
+0

Пожалуйста, упорядочивайте ваш код более удобным для чтения способом! – DaneSoul

+0

Пожалуйста, сообщите более подробную информацию об изображении. Размер, ширина, высота, конец файла – Sliq

+0

@ChristianLavie спасибо, я думаю, что вы были на правильном пути, потому что из-за ширины и высоты изображения код был испорчен из-за инструкции if. починил это. cheers –

ответ

0

Вы не проверяете, удалось ли загрузить, и предположили, что он имеет. Это плохой способ написать код. Существует точно ОДИН способ для загрузки для успеха, и МНОГИЕ способы его провалиться.

Вы также считаете, что человек, делающий загрузку, не злонамерен и не будет просто переименовывать свой nastyvirus.exe в cutekittens.jpg перед загрузкой.

В минимум, вам нужно иметь

if ($_FILES['userfile']['error'] !== UPLOAD_ERR_OK) { 
    die('Upload failed with error code ' . $_FILES['userfile']['error']); 
} 

, чтобы убедиться, что вы на самом деле у меня что-то полезное для работы, а затем использовать что-то вроде http://php.net/fileinfo иметь SERVER определить, какой тип файла будет равен.

Никогда НИКОГДА не доверяйте, что пользователь отправляет вам.

+0

Большое спасибо, я исправил проблему, проблема if, где он проверял высоту и ширину изображения, была проблема. я не писал код, но я был слишком ленив и слишком спешил переписать его: P. большое спасибо. ура –