2010-09-01 3 views
0

Quand je l'ai fait cette fonction:PHP: Faire une vignette, pourquoi ai-je ces erreurs?

function makeThumbnail($type, $name, $size, $tmp_name, $thumbSize) { 

//make sure this directory is writable! 

$path_thumbs = "uploaded_files/";  

//the new width of the resized image, in pixels. 

$img_thumb_width = $thumbSize; // 

$extlimit = "yes"; //Limit allowed extensions? (no for all extensions allowed) 

//List of allowed extensions if extlimit = yes 

$limitedext = array(".gif",".jpg",".png",".jpeg",".bmp");  

//the image -> variables 
$file_type = $type; 

$file_name = $name; 

$file_size = $size; 

$file_tmp = $tmp_name; 
//check if you have selected a file. 
echo $file_tmp."<br>"; 
echo $file_name."<br>"; 
echo $file_type."<br>"; 
echo $file_size."<br>"; 

if(!is_uploaded_file($file_tmp)){ 

echo "Error: Please select a file to upload!. <br>--<a href=\"$_SERVER[PHP_SELF]\">back</a>"; 

exit(); //exit the script and don't process the rest of it! 

} 

//check the file's extension 

$ext = strrchr($file_name,'.'); 

$ext = strtolower($ext); 

//uh-oh! the file extension is not allowed! 

if (($extlimit == "yes") && (!in_array($ext,$limitedext))) { 

echo "Wrong file extension. <br>--<a href=\"$_SERVER[PHP_SELF]\">back</a>"; 

exit(); 

} 

//so, whats the file's extension? 

$getExt = explode ('.', $file_name); 

$file_ext = $getExt[count($getExt)-1]; 

//create a random file name 

$rand_name = md5(time()); 

$rand_name= rand(0,999999999); 

//the new width variable 

$ThumbWidth = $img_thumb_width; 



///////////////////////////////// 

// CREATE THE THUMBNAIL // 

//////////////////////////////// 



//keep image type 

if($file_size){ 

if($file_type == "image/pjpeg" || $file_type == "image/jpeg"){ 

$new_img = imagecreatefromjpeg($file_tmp); 

}elseif($file_type == "image/x-png" || $file_type == "image/png"){ 

$new_img = imagecreatefrompng($file_tmp); 

}elseif($file_type == "image/gif"){ 

$new_img = imagecreatefromgif($file_tmp); 

} 

//list the width and height and keep the height ratio. 

list($width, $height) = getimagesize($file_tmp); 

//calculate the image ratio 

$imgratio=$width/$height; 

if ($imgratio>1){ 

$newwidth = $ThumbWidth; 

$newheight = $ThumbWidth/$imgratio; 

}else{ 

$newheight = $ThumbWidth; 

$newwidth = $ThumbWidth*$imgratio; 

} 

//function for resize image. 

if (function_exists(imagecreatetruecolor)){ 

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

}else{ 

die("Error: Please make sure you have GD library ver 2+"); 

} 

//the resizing is going on here! 

imagecopyresampled($resized_img, $new_img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 

//finally, save the image 

ImageJpeg ($resized_img,"$path_thumbs/$rand_name.$file_ext", 100); 

ImageDestroy ($resized_img); 

ImageDestroy ($new_img); 





} 



//ok copy the finished file to the thumbnail directory 

// move_uploaded_file ($file_tmp, "$path_big/$rand_name.$file_ext"); 

/* 

Don't want to copy it to a separate directory? 

Want to just display the image to the user? 

Follow the following steps: 



2. Uncomment this code: 

/* 

/* UNCOMMENT THIS IF YOU WANT */ 

echo "OK THUMB " . $thumbSize; 

exit(); 

//*/ 



//and you should be set! 



//success message, redirect to main page.  

$msg = urlencode("$title was uploaded! <a href=\"Resize.php\">Upload More?</a>"); 
} 

Ensuite, il a cessé de fonctionner, mais en dehors d'une fonction, il fonctionne bien.

Comme vous pouvez le voir j'ai ajouté "echo $ file ...." parce que je voulais voir si elles ont une valeur, et ils ont les bonnes valeurs.

Je viens d'obtenir l'erreur Erreur: S'il vous plaît sélectionner un fichier à télécharger.

Cette fonction est exécutée après un script d'image de téléchargement normal (taille réelle).

Quand j'appelle la fonction que je fais:

makeThumbnail($_FILES[$fieldname]['type'], $_FILES[$fieldname]['name'], $_FILES[$fieldname]['size'], $_FILES[$fieldname]['tmp_name'], 100); 

À mon autre fichier où son pas en fonction, Theres aucune différence seulement que les variables est:

$file_type = $_FILES['file']['type']; 

$file_name = $_FILES['file']['name']; 

$file_size = $_FILES['file']['size']; 

$file_tmp = $_FILES['file']['tmp_name']; 

Mais il devrait fonctionner , Je ne peux pas trouver quelque chose de mal, mais ça ne marche pas et je continue à obtenir cette erreur. Si je supprime la fonction is_uploaded_file, j'obtiens un tas d'autres erreurs.

+0

Certains débogage d'abord s'il vous plaît. Que contient un 'print_r ($ _ FILES)'? Est-ce que '$ tmp_name' pointe vers un fichier existant? –

+0

Salut, le nom de fichier que vous passez avec la fonction 'is_uploaded_file' est sensible à la casse, même sur Windows! Sur Windows, PHP a tendance à utiliser des variables d'environnement comme% TEMP% pour déterminer le dossier de téléchargement et ces variables d'environnement ont parfois des majuscules différentes du chemin réel. – klennepette

Répondre

2

Assurez-vous de ne pas utiliser move_uploaded_file() avant d'appeler la fonction.

0

J'utilise timthumb pour traiter l'image dans une vignette lors de sa sortie à l'écran, plutôt que quand elle est téléchargée. Cela signifie que vous ne disposez que d'un fichier et non d'un fichier maître et d'un format de pouce. TimThumb réduit la taille du fichier sur le serveur afin qu'il apparaisse agréable et lisse sur le navigateur. Regardez-le: TimThumb Link

+0

il n'a pas demandé ce que vous utilisez ... il a demandé pourquoi son code ne fonctionne pas. – Timothy

+0

Je lui donnais en fait une façon alternative de faire la même chose qu'un plugin. Ce n'est pas une solution que je connais, mais c'est une alternative utile –

+0

PS: J'ai également vérifié votre lien pour TimThumb. 777 n'est pas une bonne autorisation pour un répertoire temporaire, et vous voudrez peut-être vous pencher sur le portage vers imagick pour une meilleure utilisation de la mémoire. – Timothy

Questions connexes