Upload image

Signaler
Messages postés
57
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
12 septembre 2009
-
Messages postés
57
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
12 septembre 2009
-
bonjour,
j'ai créer un système d'upload pour des image stocker dans une base de donnée .
mon script fonctionne bien en local mais plus sur le net (je suis chez ovh)
quelqu'un aurait il une idée pour résoudre ce problème?

voici la partie de l'upload:

// Taille maximum
$MAX_FILE_SIZE = 30000;
// Tableau array des différents types
$allowed_types = array("image/gif", "image/pjpeg", "image/jpeg", "image/jpg");

// Variables récupérée par methode POST du formulaires
$fname = $_FILES['FileUpload']['name'];
$ftype = $_FILES['FileUpload']['type'];
$fsize = $_FILES['FileUpload']['size'];
$ftmp = $_FILES['FileUpload']['tmp_name'];

//répertoire temp
$repertoire = getcwd();
//si il y a un fichier uploader
if (is_uploaded_file($_FILES['FileUpload']['tmp_name']))
{


if( ($fsize <= $MAX_FILE_SIZE) && (in_array($ftype, $allowed_types)) )//debut pas erreur test image
{
copy($_FILES['FileUpload']['tmp_name'], $repertoire . "\" . $_FILES['FileUpload']['name']);

$fp=fopen($_FILES['FileUpload']['name'],"rb");
$buf =addslashes(fread($fp,filesize($_FILES['FileUpload']['name'])));
fclose($fp);
//insertion si image ok
$sql = "INSERT INTO annonces (id_annonces,dateajoute,theme,titre,photo,region,prix,descriptif,id_client,statut,region_admin)
VALUES ( '',NOW(),'$theme','$titre', '$buf', '$region_user', '$prix', '$descriptif','$idclient','$statut','$region_r') " ;

//exécution de la requête SQL:
$requete = mysql_query($sql) or die( mysql_error() ) ;

//efface le fichier car présent dans la base désormais
unlink($_FILES['FileUpload']['name']);

}

j'ai ce type d'erreur

Warning : fopen(poussette_sport.jpg): failed to open stream: No such file or directory in ...
Warning: filesize(): Stat failed for poussette_sport.jpg (errno =2 - No such file or directory)
Warning: fread(): supplied argument is not a valid stream resource in....

Warning: fclose(): supplied argument is not a valid stream resource in ....
Warning: unlink(poussette_sport.jpg): No such file or directory in ..

merci d'avance pour votre aide.

10 réponses

Messages postés
181
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
2 mars 2009

salut,

en fait tous les warnings découlent du premier puisqu'il ne peut pas ouvrir le fichier (non trouvé)

donc le chemin du fichier coince...

Tu copies ton fichier temporaire vers $repertoire . "\" . $_FILES['FileUpload']['name']

(en passant depuis la version 4.0.3 tu as le moyen de faire la même chose en utilisant move_uploaded_file())

donc je serais tenté de dire qu'il faudrait faire un fopen($repertoire . "\" . $_FILES['FileUpload']['name']) non? (même si $repertoire est le répertoire courant)



Ensuite sur les systèmes Linux, je ne suis pas sur que le chemin du
type mon\dossier\mon\fichier.image puisse être résolu alors que
mon/dossier/mon/fichier.image oui

(à vérifier) ... et sous Windows je pense que les chemins comme ceci "/" fonctionnent également...
Messages postés
57
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
12 septembre 2009

bonjour,
j'ai essayer ta solution mais j'ai toujours le même problème du fichier qui ne s'ouvre pas
j'ai cependant remplacer mon copy par move_upload_file plus actuel
c'est vraiment curieux qu'en local cela fonctionne parfaitement mais plus sur le net(rrrrrrrrr!!!!!!)
merci pour ton aide
Messages postés
181
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
2 mars 2009

et pour le \, tu as essayé de le remplacer par / ? essaie de reposter
ton bout de code avec la modif que tu as faites pour vérifier
Messages postés
57
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
12 septembre 2009

rebonjour,

ah çà fonctionne pour l'insertion d'image mais pas encore pour la modification

j'ai fait:
move_uploaded_file($_FILES['FileUpload']['tmp_name'], $repertoire . "//" . $_FILES['FileUpload']['name']);
$fichier=$repertoire . "//" . $_FILES['FileUpload']['name'];
$fp=fopen($fichier,"rb");
$buf =addslashes(fread($fp,filesize($_FILES['FileUpload']['name'])));
fclose($fp);

et çà à l'ai de fonctionner

merci
Messages postés
181
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
2 mars 2009

par contre le doublement du slash n'est pas utile si? j'aurais juste mis "/" et non pas "//" ...
Messages postés
57
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
12 septembre 2009

salut,

j'ai mis des simple "/" et çà fonctionne aussi
mais j'ai une autre question .
je dois effectuer une modification et là cela ne fonctionne pas pourtant normalement si j'ai effectuer un changement d'image uploader (en utilisant la même méthode que ci-dessus)je dois écraser la valeur existant dans ma base?non

move_uploaded_file($_FILES['FileUpload']['tmp_name'], $repertoire . "/" . $_FILES['FileUpload']['name']);
$fichier=$repertoire . "/" . $_FILES['FileUpload']['name'];
$fp=fopen($fichier,"rb");
$buf =addslashes(fread($fp,filesize($_FILES['FileUpload']['name'])));
fclose($fp);
//insertion si image ok
$sql = "UPDATE annonces
SET
theme = '$theme',
titre = '$titre',
prix ='$prix',
photo = '$buf',
descriptif = '$descriptif',
valider_annonce = 0
WHERE id_annonces = ".$id ;

...
Messages postés
181
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
2 mars 2009

re :


qu'est ce qui ne fonctionne pas?


Je suis d'accord que si le fichier que tu postes existes déja dans ton
répertoire, il écrasera l'ancien fichier qui portait le même nom (cf move_uploaded_file())

mais après si c'est la modif dans la base de données...
Messages postés
57
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
12 septembre 2009

et bien en utilisant la même méthode de récupération d'un fichier uploader je devrais pouvoir récupérer une valeur (ici blob) qui vient écraser ma valeur( blob) présente dans ma table
or en local cela fonctionnait bien maintenant il conserve l'ancienne valeur (le fichier déja présent dans la base)
mon erreur est peut-être dans ma boucle de condition?
parce que je crois qu'il ne recupère pas de fichier et passe à ma requete qui modifie les autre champs sans le fichier
voici mon code simplifier:
//je récupère le fichier
$fname = $_FILES['FileUpload']['name'];
$ftype = $_FILES['FileUpload']['type'];
$fsize = $_FILES['FileUpload']['size'];
$ftmp = $_FILES['FileUpload']['tmp_name'];

//si le nouveau fichier existe
if (is_uploaded_file($_FILES['FileUpload']['tmp_name']))
{
move_uploaded_file($_FILES['FileUpload']['tmp_name'], $repertoire . "/" . $_FILES['FileUpload']['name']);
$fichier=$repertoire . "/" . $_FILES['FileUpload']['name'];
$fp=fopen($fichier,"rb");
$buf =addslashes(fread($fp,filesize($_FILES['FileUpload']['name'])));
fclose($fp);
//puis update
$sql = "UPDATE annonces
SET
theme = '$theme',
titre = '$titre',
prix ='$prix',
photo = '$buf',
descriptif = '$descriptif',
valider_annonce = 0
WHERE id_annonces = ".$id ;
$requete = mysql_query($sql) or die( mysql_error() ) ;

unlink($_FILES['FileUpload']['name']);

}else{//pas de fichier à modifier

$sql = "UPDATE annonces
SET
theme = '$theme',
titre = '$titre',
prix ='$prix',
descriptif = '$descriptif',
valider_annonce = 0
WHERE id_annonces = ".$id ;
$requete = mysql_query($sql) or die( mysql_error() ) ;
}

encore un tut grand merci pour ton aide
Messages postés
181
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
2 mars 2009

de rien ...

essaie de voir ça dans ton else pour savoir pourquoi il a pas été uploadé ton fichier (et donc qu'il passe dans ton else)

 switch($HTTP_POST_FILES['userfile']['error']){

    case 0: //no error; possible file attack!

      echo "There was a problem with your upload.";

      break;

    case 1: //uploaded file exceeds the upload_max_filesize directive in php.ini

      echo "The file you are trying to upload is too big.";

      break;

    case 2: //uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form

      echo "The file you are trying to upload is too big.";

      break;

    case 3: //uploaded file was only partially uploaded

      echo "The file you are trying upload was only partially uploaded.";

      break;

    case 4: //no file was uploaded

      echo "You must select an image for upload.";

      break;

    default: //a default error, just in case!  :)

      echo "There was a problem with your upload.";

      break;






(source : http://fr.php.net/manual/fr/function.is-uploaded-file.php#29635)
Messages postés
57
Date d'inscription
samedi 30 avril 2005
Statut
Membre
Dernière intervention
12 septembre 2009

salut,

j'ai trouver mon erreur il s'agissait du name du champ fichier qui n'était pas le même (trop bête).
à force de modification j'ai peut-être du le modifier pk je sais pas .bref cela fonction bien désormais insertion et modification.
Un grand merci pour ton aide et bonne fin de journée