Bonsoir,
J'ai un problème avec l'upload de fichier du tutoriel Développer un site avec CakePHP, Jour 2. En fait je souhaiterais autoriser l'upload des images avec l'extension en MASJUSCULE du style .JPG
Alors dans un premier temps j'ai autorisé les extensions en masjuscule avec la bonne règle dans $validate
Mais lors de l'upload j'ai des erreurs que je parviens pas à identifier précisément.
Voici un résumé des erreurs
Warning (2): getimagesize(C:\wamp\www\cakephp246\app\webroot\img\2014\03\IMG-3695.JPG) [function.getimagesize]: failed to open stream: No such file or directory [APP\Controller\Component\ImgComponent.php, line 5]
Warning (2): Division by zero [APP\Controller\Component\ImgComponent.php, line 6]
Warning (2): imagecreatefromjpeg(C:\wamp\www\cakephp246\app\webroot\img\2014\03\IMG-3695.JPG) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory [APP\Controller\Component\ImgComponent.php, line 20]
Warning (2): imagecopyresampled() expects parameter 2 to be resource, boolean given [APP\Controller\Component\ImgComponent.php, line 24]
Warning (2): getimagesize(C:\wamp\www\cakephp246\app\webroot\img\2014\03\IMG-3695.JPG) [function.getimagesize]: failed to open stream: No such file or directory [APP\Controller\Component\ImgComponent.php, line 5]
Warning (2): Division by zero [APP\Controller\Component\ImgComponent.php, line 6]
Warning (2): imagecreatefromjpeg(C:\wamp\www\cakephp246\app\webroot\img\2014\03\IMG-3695.JPG) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory [APP\Controller\Component\ImgComponent.php, line 20]
Warning (2): imagecopyresampled() expects parameter 2 to be resource, boolean given [APP\Controller\Component\ImgComponent.php, line 24]
Dans le tuto il a ajouté un composant qui est ImgComponent.php, il semble que les erreurs viennent de lui :
<?php
class ImgComponent extends Component {
function crop($img,$dest,$largeur=0,$hauteur=0){
$dimension=getimagesize($img);
$ratio = $dimension[0] / $dimension[1];
// Création des miniatures
if($largeur==0 && $hauteur==0){ $largeur = $dimension[0]; $hauteur = $dimension[1]; }
else if($hauteur==0){ $hauteur = round($largeur / $ratio); }
else if($largeur==0){ $largeur = round($hauteur * $ratio); }
if($dimension[0]>($largeur/$hauteur)*$dimension[1] ){ $dimY=$hauteur; $dimX=round($hauteur*$dimension[0]/$dimension[1]);}
if($dimension[0]<($largeur/$hauteur)*$dimension[1]){ $dimX=$largeur; $dimY=round($largeur*$dimension[1]/$dimension[0]);}
if($dimension[0]==($largeur/$hauteur)*$dimension[1]){ $dimX=$largeur; $dimY=$hauteur;}
if($dimension[0]>($largeur/$hauteur)*$dimension[1] ){ $dimY=$hauteur; $dimX=round($hauteur*$dimension[0]/$dimension[1]); $decalX=($dimX-$largeur)/2; $decalY=0;}
if($dimension[0]<($largeur/$hauteur)*$dimension[1]){ $dimX=$largeur; $dimY=round($largeur*$dimension[1]/$dimension[0]); $decalY=($dimY-$hauteur)/2; $decalX=0;}
if($dimension[0]==($largeur/$hauteur)*$dimension[1]){ $dimX=$largeur; $dimY=$hauteur; $decalX=0; $decalY=0;}
$miniature =imagecreatetruecolor ($largeur,$hauteur);
if(substr($img,-4)==".jpg" || substr($img,-4)==".JPG"){$image = imagecreatefromjpeg($img); }
if(substr($img,-4)==".png" || substr($img,-4)==".PNG"){$image = imagecreatefrompng($img); }
if(substr($img,-4)==".gif" || substr($img,-4)==".GIF"){$image = imagecreatefromgif($img); }
imagecopyresampled($miniature,$image,-$decalX,-$decalY,0,0,$dimX,$dimY,$dimension[0],$dimension[1]);
imagejpeg($miniature,$dest,90);
return true;
}
}
?>
Une idée ?
J'ai fais un debug ou tu m'as dit et en fait j'avais ça en retour :
\app\Controller\MediasController.php (line 16)
array(
'name' => '',
'file' => array(
'name' => 'P1120063.JPG',
'type' => '',
'tmp_name' => '',
'error' => (int) 1,
'size' => (int) 0
)
)
En cherchant sur le net à quoi correspond le code error 1 , j'ai vu qu'il s'agissait en réalité d'une limitation de la taille de l'upload dans le php.ini à 2M.
<u><em>Explication sur les messages d'erreurs de chargement de fichiers</em></u>
<u><em>Valeur : 1. Le fichier téléchargé excède la taille de upload_max_filesize, configurée dans le php.ini.</em></u>
Tout con en fait, lol.
Je n'avais pas pensé à la limitation de la taille, car cela fonctionné bien avec les images dont l'extension était en minuscule sauf que "comme par hasard" celles-ci faisaient toutes moins de 2M lors de mes essais.
Bref encore une fois merci Lartak11 tu m'as mis sur la bonne piste.
Bonsoir.
Non, je ne pense pas que le problème vienne du composant Img.
Il te faut plutôt vérifier entre la soumission de ton formulaire et le traitement du fichier image, avant qu'il ne soit traité par le composant Img.
Tu fais l'upload depuis l'action admin_edit du controlleur Posts.
C'est bien ça ?