PDA

Afficher la version complète : [Réglé] PHP, upload de fichier et les renomers...



adminlinux
08/05/2006, 15h37
Bonjour,

Je souhaite modifier le non du fichier sur la bases de ce script,


$datejour = date("YmdHs");
//Upload d'une photo
if (isset($_FILES["photo1"]) && $_FILES["photo1"]["error"] == 0) {
if(preg_match('/\\.(jpg|jpeg|png|gif)$/i',$_FILES["photo1"]["name"]))
{

//Redimensionnement de l'image
$image=$_FILES["photo1"]["tmp_name"];
if(preg_match('/\\.(png)$/i',$_FILES["photo1"]["name"]))
$img=imagecreatefrompng($image);
elseif(preg_match('/\\.(gif)$/i',$_FILES["photo1"]["name"]))
$img=imagecreatefromgif($image);
else
$img=imagecreatefromjpeg($image);

$taille=getimagesize($image);
$largeur=$taille[0];
$hauteur=$taille[1];
$largeurimage = 800;
$hauteurimage = 600;

if ($largeur>$largeurimage)
{
$entroplargeur=$largeur-$largeurimage;
$largeur2=$largeur-$entroplargeur;
$hauteur2=round(($largeur2/$largeur)*$hauteur);
$img3=imagecreatetruecolor($largeur2,$hauteur2);
imagecopyResampled($img3,$img,0,0,0,0,$largeur2,$h auteur2,$largeur,$hauteur);
imagejpeg($img3,$_FILES["photo1"]["tmp_name"],85);
}
if (!is_dir("/var/www/photos1"))
mkdir("/var/www/photos1", 777);
copy($_FILES["photo1"]["tmp_name"], "/var/www/photos1/".$_FILES["$datejour"]["name"]);
$fichier1 = $_FILES["$datejour"]["name"];

le problème c'est que sa fonctionne pas, rien dans la base rien dans le repertoir et un joli message d'erreur

<div class='quotetop'>Citation </div>
Warning: copy(/var/www/photos1/) [function.copy]: failed to open stream: Is a directory in[/b]

Merci d'avance pour votre aides.

Dudule-le-poisson
08/05/2006, 17h10
Ton deuxième argument pour la fonction copy me paraît foireux (notamment le [$datejour]) ; essaye plutôt, selon ce que tu souhaites réaliser :


// creation eventuelle du repertoire /var/www/photos1
if (!is_dir("/var/www/photos1")) mkdir("/var/www/photos1", 777);

// creation eventuelle du repertoire /var/www/photos1/<date du jour>
if (!is_dir("/var/www/$datejour") mkdir("/var/www/$datejour");

// copie du fichier uploadé et modifié vers ce dossier
copy($_FILES["photo1"]["tmp_name"], "/var/www/photos1/$datejour/".$_FILES["photo1"]["tmp_name"]);

ou


// creation eventuelle du repertoire /var/www/photos1
if (!is_dir("/var/www/photos1")) mkdir("/var/www/photos1", 777);

// copie du fichier uploadé et modifié vers ce dossier avec un nom de fichier contenant la date
copy($_FILES["photo1"]["tmp_name"], "/var/www/photos1/$datejour-".$_FILES["photo1"]["tmp_name"]);

adminlinux
08/05/2006, 18h51
le but, c'est d'avoir un non de fichier unique avec son extention .jpg .gif .png .jpeg

y a bin moien de remplacé le non du fichier du client par la date !!!

Dudule-le-poisson
08/05/2006, 18h59
oui, cf ma deuxieme proposition de code - remplace juste le .$_FILES["photo1"]["tmp_name"] par l'extension de ton choix.

Ps : c'est moi ou tu as oublié les minutes ( i ) dans ton format de date ?

adminlinux
08/05/2006, 20h03
non c'est juste dans une modif j'ai acroché cette endroit, YmdHis c'est correcte ???

Sinon j'avance, je suis arrrivé a quelque chause qui fonctionne tres bien, le seul problème qu'il me rèste est que le redimentionnement ne fonctionne plus.


$datejour = date("YmdHis");
//Upload d'une photo
if (isset($_FILES["photo1"]) && $_FILES["photo1"]["error"] == 0) {
if(preg_match('/\\.(jpg|jpeg|png|gif)$/i',$_FILES["photo1"]["name"]))
{

//Redimensionnement de l'image
if(preg_match('/\\.(.png)$/i',$_FILES["photo1"]["name"])) {
$img=imagecreatefrompng($image);
$ext = 'png';
}
elseif(preg_match('/\\.(.gif)$/i',$_FILES["photo1"]["name"])) {
$img=imagecreatefromgif($image);
$ext = 'gif';
}
else {
$img=imagecreatefromjpeg($image);
$ext = (preg_match('/\\.(jpg)$/i',$_FILES["photo1"]["name"])) ? '.jpg' : '.jpeg';
}

$taille=getimagesize($image);
$largeur=$taille[0];
$hauteur=$taille[1];
$largeurimage = 800;
$hauteurimage = 600;

if ($largeur>$largeurimage)
{
$entroplargeur=$largeur-$largeurimage;
$largeur2=$largeur-$entroplargeur;
$hauteur2=round(($largeur2/$largeur)*$hauteur);
$img3=imagecreatetruecolor($largeur2,$hauteur2);
imagecopyResampled($img3,$img,0,0,0,0,$largeur2,$h auteur2,$largeur,$hauteur);
imagejpeg($img3,$_FILES["photo1"]["tmp_name"],85);
}
copy($_FILES["photo1"]["tmp_name"], "/var/www/photos1/".$datejour.$ext);
$fichier1 = $datejour.$ext;

Dudule-le-poisson
08/05/2006, 20h45
Oui, ton format me paraît correct.

Pour ton redimensionnement, il ne fonctionne pas car ($largeur>$largeurimage) n'est jamais réalisé.
($largeur>$largeurimage) n'est jamais réalisé car $taille=getimagesize($image); or, je ne vois aucune initialisation de $image dans ton script ; peut-être voulais-tu utiliser $img (que tu initialises à partir de $image, d'ailleurs) ?

Concrètement, je crois qu'il te manque un petit

$image = $_FILES["photo1"]["name"]

adminlinux
08/05/2006, 21h00
sa avais disparu dans une correction...

je rajout et opssss message d'erreur.... j'ai la rage au corp la...

pas sur toi hien lolll.



Warning: imagecreatefromjpeg(P1171141.JPG) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in /home/cobra/Documents/envoioffre.php on line 63

Warning: getimagesize(P1171141.JPG) [function.getimagesize]: failed to open stream: No such file or directory in /home/cobra/Documents/envoioffre.php on line 67

Dudule-le-poisson
08/05/2006, 21h00
T'as plus qu'à nous faire partager ce <strike>point de vue philosophique sur le pourquoi de la vie</strike> message d'erreur

EDIT : ah, toi aussi, tu aimes éditer http://www.alionet.org/style_emoticons/<#EMO_DIR#>/smile.gif

La solution : oh pardon, c'est $image = $_FILES["photo1"]["tmp_name"]

Petit conseil supplémentaire : je pense que la plupart de ces fonctions renvoient un booléen représentant la réussite ou l'échec du traitement à effectuer. Vérifie ces booléens de retour aussi souvent que possible.

adminlinux
08/05/2006, 21h10
sa fonctionne oufff tu viens de me sauvé du suicide....

tu vois, parfois en aident tu sauve des vies, la tu aurai spas du car j'aurais surement d'autre question.... http://www.alionet.org/style_emoticons/<#EMO_DIR#>/biggrin.gif

Dudule-le-poisson
08/05/2006, 21h18
Ce n'est qu'un sursis ; n'oublie pas que trop de questions entraîne la sortie du fusil à plomb... http://www.alionet.org/style_emoticons/<#EMO_DIR#>/biggrin.gif