Message d'erreur lors de l'insertion de l'image

Répondre
coringan
le 08/10/2009 à 01:29
coringan
Je reçois les deux messages suivants même s’il est vrai que mon image s’enregistre.
Est ce que quelqu’un pourrait me dire comment contourner ce problème ?

Warning: fread(): supplied argument is not a valid stream resource in C:\wamp\www\maget\Chargement.php on line 32

Warning: fclose(): supplied argument is not a valid stream resource in C:\wamp\www\Magest\Chargement.php on line 34


Voici la parcelle à problèmes :

<?php
$Nom_tempo = $_FILES["photo"]["tmp_name"];
$Fichier = fopen($Nom_tempo, 'r');
$Photo = fread($Fichier, filesize($Nom_tempo));
$Photo = addslashes($Photo);
fclose($Fichier);
Je fais ce qui me plaît, et ce que je fais me plaît !
laura
le 08/10/2009 à 11:02
laura
C'est une drole d'idée de passer par fopen pour transférer une image du dossier temporaire vers ton dossier.
Il y a des fonctions php pour faire ça move_uploaded_files

Regarde aussi is_uploaded_file
Des étoiles dans les yeux, le ciel pour m'évader
laura
le 08/10/2009 à 11:35
laura
Voila avec ça tu devrais t'en sortir. C'est les infos retourner par la variable $_FILES
<?php
// nom tempotaire de ton image sur le serveur
$tmp=$_FILES['photo']['tmp_name'];
// vrai nom de ton image
$name=$_FILES['photo']['name'];
//type mime de ton image
$type=$_FILES['photo']['type'];
//error retourné (0 si aucune erreur n'a eu lieu)
$error=$_FILES['photo']['error'];
//taille de ton fichier image en octets
$size=$_FILES['photo']['size'];
?>

A toi de faire des tests dessus pour vérifier que c'est bien une image, qu'elle a la bonne taille, qu'il n'y a pas eu d'erreur lors du transfert...
Des étoiles dans les yeux, le ciel pour m'évader
coringan
le 08/10/2009 à 18:05
coringan
Tu as raison mais j’avais déjà essayé ça avant sans succès.
Il me semble que is_uploaded_file vérifie simplement si le fichier a été chargé, et move_uploaded_file pour le déplacement du ficher.
Alors ma variable $Photo = ? (est égale à quoi). Puisqu’elle devra aller dans un champs de la base de données.
Je fais ce qui me plaît, et ce que je fais me plaît !
laura
le 08/10/2009 à 18:33
laura
Ta variable photo prend le nom que tu veux ^^

Par exemple, si tu veux conserver le nom :

<?php
$tmp=$_FILE['photo']['tmp_name'];
$photo=$_FILE['photo']['name'];

//dossier de reception
$mon_dossier_de_reception='images';
//chemin final vers ton fichier téléchargé
$mon_fichier = $mon_dossier_de_reception.'/'.$photo;
if(is_uploaded_file($tmp))
{
if(move_uploaded_file($tmp, $mon_fichier)){
//ma photo a bien été téléchargé
}
}

Si tu veux changer le nom tu changes juste la variable $photo par ce que tu veux.

Attention de garder la même extention de fichier.

Exemple $photo='moi.jpg';

Bien sûr mon exemple ne prend pas en compte les tests sur les images (taille,poids,dimension etc etc). C'est juste un exemple
Des étoiles dans les yeux, le ciel pour m'évader
laura
le 08/10/2009 à 18:39
laura
Oups 2 erreurs

ligne 3 $tmp=$_FILE['photo']['tmp_name'];

et ligne 10 il manque une ) en fin de ligne

Je devrais me relire avant de poster smiley désolée
Des étoiles dans les yeux, le ciel pour m'évader
LupusMic
le 08/10/2009 à 19:19
LupusMic
(laura) C'est pourquoi je teste (presque) toujours avant de poster ;) PHP est tellement incohérent qu'il nécessite de toute façon de s'assurer que le nom de la fonction et que son usage soient corrects.

(coringan) Laura a dit l'essentiel. Mais je rajouterais qu'il faut toujours tester qu'une opération s'est bien déroulée. Dans le code de Laura, tu remarqueras qu'elle fait usage des fonctions en s'assurant que l'opération ce soit bien déroulée. L'acquisition d'une ressource (telle que l'ouverture d'un fichier) doit être systématiquement testée et gérée. Ainsi on peut se rendre compte de ce qui ne va pas.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
coringan
le 09/10/2009 à 05:30
coringan
Ok, tout va bien jusqu'à la ligne 7 du code que tu m'as fait parvenir, je peux même aller dans le répertoire et ouvrir l'image par un double click.
Mais à partir de là, je ne peux plus l'obtenir pour l'insérer dans la DB, à partir de la ligne 9, $mon_fichier devient incompréhensible alors que le reste est bien clair.
Merci quand même.
Je fais ce qui me plaît, et ce que je fais me plaît !
laura
le 09/10/2009 à 10:44
laura
La ligne 7 représente le dossier de réception. Cela suppose donc que tu crées un dossier images (Bon j'ai prit comme nom images mais tu peux mettre le nom de ton choix).
La ligne 9 représente le chemin final vers l'image téléchargé sur le serveur (si tu veux l'afficher par exemple).

Par contre j'ai peur de comprendre que tu souhaites insérer ton image en base de données. Si cela est le cas, c'est une TRES TRES mauvaise idée smiley En base de données, tu n'insères que le nom de l'image... JAMAIS l'image par elle même. Sinon tu vas alourdir ta base pour rien.

Dans l'exemple, tu insères $photo en base de données. Lorsque tu veux l'afficher, tu vas chercher le nom de l'image et tu recrées le lien vers elle smiley c'est aussi bête que ça
Des étoiles dans les yeux, le ciel pour m'évader
coringan
le 11/10/2009 à 05:29
coringan
Merci à toi.

J'ai finalement réussi avec ceci:

$N_tempo = $_FILES['photo']['tmp_name'];
$N_image = $_FILES['photo']['name'];
$T_image = ($_FILES["photo"]["size"] / 1024);
$T_image = $_FILES['photo']['type'];
$Err_image = $_FILES['photo']['error'];
$repert = '/wamp/www/Sarty/images/';
$photo = $repert . basename($_FILES['photo']['name']);
$photo = addslashes($photo));
Je fais ce qui me plaît, et ce que je fais me plaît !
Répondre
LoadingChargement en cours