upload de fichier

Invité
Invité n'ayant pas de compte PHPfrance

20 nov. 2006, 23:34

Bonjour,
Je voudrais installez un formulaire d'envoi de fichier sur mon site pour recevoir des photos. J'ai trouver un tuto sur le upload sur ce site mais j'y comprends rien. Je le teste en local sur easyPHP visiblement l'envoi fonctionne, mais c'est pour récupérer sauvegardé les fichiers normalement envoyés que je suis complètement largué.
La fonction $_files ou $_post me donne rien du tout sauf des message d'erreur j'ai pourtant simplement copier coller le code fournit.
Comment je peux savoir où vont les fichiers et surtout comment les enregistrer pour pouvoir les consevés.
Si vous connaissez un tuto avec le code qui fonctionne sans erreur je suis preneur.

Merci

ViPHP
ViPHP | 2144 Messages

20 nov. 2006, 23:39

Salut,

Le tutorial que tu as du trouver est probablement bon, mais demandes quelques modifications pour fonctionner correctement.

Le mieux serait que tu nous montres le code tel que tu l'utilise pour qu'on puisse t'expliquer comment isoler le problème.

Ceci dit, $_FILES est une variable super-globale qui va contenir les fichiers uploadé sur le serveur via le formulaire.
Pour voir ce que le serveur a réellement reçu, tu peux ajouter un
print_r($_FILES)
au début du script pour voir ce qu'elle contient.
Ca permettra de déja un peu cerner le problème.

Eléphanteau du PHP | 19 Messages

21 nov. 2006, 16:57

Voici le code de la page d'upload:
<form method="post" action="notre_script.php"
enctype="multipart/form-data">
	
	<input type="hidden" name="MAX_FILE_SIZE" value="2097152" />
	<input type="file" name="fichier" /><br /><br />
	
	<input type="submit" value="Uploader le fichier" /><br /><br />
	<input type="reset" value="Reinitialiser le formulaire" />
</form>
Celle de la page notre_script.php :
<?

$dir = "/";

// Nous testons si les données concernant le fichier
// uploadé existent.
if( isset($_FILES["fichier"]) ){

	// Nous affichons le nom du fichier
	echo "- Upload du fichier <b>".$_FILES["fichier"]["name"]."</b> en cours ...<br />\n";
	
	echo "- Analyse du fichier ...<br />\n";
	// Nous affichons le chemin temporaire où est stocké le fichier
	echo "- Fichier temporaire: <b>".$_FILES["fichier"]["tmp_name"]."</b><br />\n";
	// Nous affichons le type de fichier
	echo "- Type du fichier: <b>".$_FILES["fichier"]["type"]."</b><br />\n";
	// Nous affichons la taille du fichier en Mo
	echo "- Taille du fichier: <b>".$_FILES["fichier"]["size"]/1024/1024 ." Mo</b><br />\n";
	
	echo "- Rapport d'erreur ...\n";
	
	// Nous affichons la valeurs de la variable $_FILES["fichier"]["error"]
	switch($_FILES["fichier"]["error"]){
		
		case 0:
			echo "<b>Le fichier à bien été tramis</b><br />\n";
			break;
		case 1:
			echo "<b>Erreur, la taille du fichier dépasse celle définie dans le fichier de configuration</b><br />\n";
			break;
		case 2:
			echo "<b>Erreur, la taille du fichier dépasse celle définie par le formulaire</b><br />\n";
			break;
		case 3:
			echo "<b>Erreur, le fichier à été partiellement transmis</b><br />\n";
			break;
		case 4:
			echo "<b>Erreur, la transmission du fichier ne s'est pas déroulée</b><br />\n";
			break;
			
	}
	
	// Nous copions le fichier issu du dossier temporaire vers le véritable
	// emplacement sur le serveur
	if( @copy($_FILES["fichier"]["tmp_name"], $dir.$_FILES["fichier"]["name"]) ){
		
		echo "- L'upload du fichier s'est bien déroulé.<br />\n";
		echo "- Vous pouvez y accédez à l'adresse suivante: ";
		echo "<a href=\"http://localhost".$dir.$_FILES["fichier"]["name"]."\">Télécharger le fichier</a><br />\n";
	}
	else{
	
		echo "Erreur durant la copie du fichier, veuillez réuploader le fichier<br />\n";
		}
}

?>
Le résultat c'est que le fichier n'est pas dans le repertoire tmp de easyphp ni dans le chemin spécifier.
Le lien "Télécharger le fichier" renvoi une erreu.
Là voici

Not Found
The requested URL /IMGP0025.JPG was not found on this server.

Apache/1.3.33 Server at localhost Port 80

Le résultat de la page notre_script.php est :

- Upload du fichier IMGP0025.JPG en cours ...
- Analyse du fichier ...
- Fichier temporaire: C:\Program Files\EasyPHP1-8\www\tmp\php22.tmp
- Type du fichier: image/jpeg
- Taille du fichier: 0.77887153625488 Mo
- Rapport d'erreur ... Le fichier à bien été tramis
- L'upload du fichier s'est bien déroulé.
- Vous pouvez y accédez à l'adresse suivante: Télécharger le fichier

Où ça bug dans mon script?
Modifié en dernier par numbers le 21 nov. 2006, 18:59, modifié 1 fois.

ViPHP
ViPHP | 2144 Messages

21 nov. 2006, 17:01

Il faut essayer d'isoler le problème: as-tu vérfier sur le serveur si le fichier s'y trouve ? dans le dossier prévu ou dans un autre ?

Eléphanteau du PHP | 19 Messages

21 nov. 2006, 17:07

Non le fichier n'y est pas dans aucun dossier. Ni le prévu par défaut ni le paramétrer par moi même à savoir C:\PROGRA~1\EASYPH~1\www\tmp

ViPHP
ViPHP | 2144 Messages

21 nov. 2006, 17:10

Tu peux déja essayer de faire un affichage des chemins que tu utilises lors de la copie du fichier, pour voir si il essaie bien de les copier la où c'est prévu.

Eléphanteau du PHP | 19 Messages

21 nov. 2006, 17:13

Rien ne se passe aucun fichier ne si inscrit.

Le code print_r($_files)

Done ceci :
Array ( [fichier] => Array ( [name] => IMGP0018.JPG [type] => image/jpeg [tmp_name] => C:\Program Files\EasyPHP1-8\www\tmp\php2A.tmp [error] => 0 [size] => 1344390 ) ) -

ViPHP
ViPHP | 2144 Messages

21 nov. 2006, 17:26

ok, donc on sait que le fichier est uploadé sur le serveur correctement, c'est donc dans la copie que quelque chose cloche.
Essaies ce que je t'ai conseillé dans mon poste précédent.

Eléphanteau du PHP | 19 Messages

21 nov. 2006, 17:32

Comment ça un affichage des chemins? Visualisez si les fichiers tente de s'y copier en explorant les dossiers concernés?

ViPHP
ViPHP | 2144 Messages

21 nov. 2006, 17:42

@copy($_FILES["fichier"]["tmp_name"], $dir.$_FILES["fichier"]["name"]) )
là tu as deux chaines de caractères, qui indique la source et la destination de la copie, il serait intéressant de vérifier ce qu'elles contiennent. surtout celle qui indique la destination.

Vérifies bien le chemin, parce que dans ton lien vers le fichier uploader, tu es directement à la racine du serveur, ce qui est un peu étonnant.

Ps: Utilises les balises PHP plutot que Code lorsque tu postes du code sur le forum, comme ça le code apparait avec la coloration synthaxique.

Eléphanteau du PHP | 19 Messages

21 nov. 2006, 18:17

Je crois que mon erreur vien de la variable $dir mais même en changeant sa valeur en
$dir = "/tmp/"
$dir = "/"
$dir = "tmp/"
rien n'y change

Eléphanteau du PHP | 19 Messages

21 nov. 2006, 18:56

Personne pour m'aider à paramétrer cette variable car en trfouillant je me rends compte que dans le dossier enregstre parfois le fichier en tmpIMGP00028.jpg
Comment paramétrer cette variable $dir ?

Eléphanteau du PHP | 19 Messages

21 nov. 2006, 19:24

voici la partie du code qui plante :
<?
$dir = "/savetmp/";
if( @copy($_FILES["fichier"]["tmp_name"], $dir . $_FILES["fichier"]["name"]) ){
		
		echo "- L'upload du fichier s'est bien déroulé.<br />\n";
		echo "- Vous pouvez y accédez à l'adresse suivante: ";
		echo "<a href=\"http://localhost".$dir.$_FILES["fichier"]["name"]."\">Télécharger le fichier</a><br />\n";
	}
	else{
	
		echo "Erreur durant la copie du fichier, veuillez réuploader le fichier<br />\n";
		}
?>

Mammouth du PHP | 1776 Messages

21 nov. 2006, 19:29

$dir = "savetmp/";
et vérifie que savetmp est bien un dossier au même niveau que ton script executé.
Enlèves également le @ devant copy :wink:

Eléphanteau du PHP | 19 Messages

21 nov. 2006, 19:36

ça y est j'ai résolu le problème.
En fait pour la variable $dir faut sous entendre qu'elle commence par c:\ puis il faut entrer l'adresse du dossier où l'on désire le fichier en remplaçant les \ par / et tout rentre dans l'ordre.

Il m'auras fallut du temps

Merci pour votre aide en tout cas ça m'as permis de comprendre mon erreur.