Page 1 sur 1

upload fichiers

Posté : 19 avr. 2013, 16:08
par cdv
Bonjour à tous !
J'ai déjà parcouru plusieurs forums et je ne comprends toujours pas comment modifier mon code afin de pouvoir choisir le fichier de destination d'un upload en local. J'ai déjà essayé de modifier $upload_path et $upload_url mais sans succès.
J'espère que vous trouverez une solution à mon problème.
Merci !
<?php
$upload_path = $_SERVER['DOCUMENT_ROOT']."/";
$upload_url = "http://".$_SERVER["HTTP_HOST"]."/";

$upload_extensions = array( 'jpg' , 'jpeg' , 'gif' , 'png' );
$upload_maxsize = 1024*1024; 


function get_pathinfo($path)
{
	$tbl=pathinfo($path);
	if (!isset($tbl["filename"])) $tbl["filename"] = basename($tbl["basename"],".".$tbl["extension"]);
	return $tbl;
}	

function upload_check_extension($file)
{
	global $upload_extensions;
	$fileinfo = get_pathinfo($file);
	return in_array(strtolower($fileinfo["extension"]),$upload_extensions);
}

function upload_check_size($filesize)
{
	global $upload_maxsize;
	return ($filesize <= $upload_maxsize);
}


foreach ($_FILES["files"]["error"] as $key => $error) 
{
    $tmp_name = $_FILES["files"]["tmp_name"][$key];
    $name = $_FILES["files"]["name"][$key];
	$msg = "Ok";
	$url = "";
	$newname = $name;
	$size = $_FILES["files"]["size"][$key];

    if ($error == UPLOAD_ERR_OK) 
	{
		if (!upload_check_extension($name))
		{
			$msg="Erreur : extension non valide";
		}
		else
		{
			if (!upload_check_size($size))
			{
				$msg="Erreur : taille trop importante";
			}
			else
			{		
				if (!move_uploaded_file($tmp_name, $upload_path.$newname)) 
				{
					$msg="Erreur : fichier bien reçu mais impossible à déplacer vers sa destination finale";
				}
				else
				{
					$url = $upload_url.$newname;
				}	
			}
		}
	}	
	else
	{	
		$msg = "Erreur lors du transfert : ".$error;
	}	
	
	if ($tmp_name)
	{
		printf('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>',
			($url) ? "<a href=\"".$url."\" target=\"_blank\">".$url."</a>" : "",
			$name,
			$size,
			$msg);
							
			$sql = 'INSERT INTO photos VALUES("","'.$_POST['continent'].'","'.$_SESSION['id'].'","'.$_POST['nom'].'","'.$name.'")';
			$reponse=$pdo->prepare($sql);
			$reponse->execute(); 
	
	}		
}
?>

Re: upload fichiers

Posté : 20 avr. 2013, 12:40
par moogli
salut,


$upload_path c'est le chemin vers le fichier (mais c'est un répertoire que l'on indique).
$newname contient le nom du fichier, par défaut c'est le nom d'origine.

@+

Re: upload fichiers

Posté : 20 avr. 2013, 14:44
par cdv
Salut,

merci pour votre réponse, je débute et je ne vois pas où je dois modifier le code. J'ai essayé de remplacer des variables par /images_upload/ mais toujours sans succès...

Cordialement

Re: upload fichiers

Posté : 20 avr. 2013, 15:19
par moogli
tu ne trouve pas la variable $newname ? O_o

Re: upload fichiers

Posté : 20 avr. 2013, 18:24
par cdv
Si j'ai bien trouvé cette variable mais en mettant l'adresse du dossier à l'intérieur ça ne m'upload tjs pas le fichier dans le bon dossier..
peut être qu'il faut une concaténation ?

Merci encore

Re: upload fichiers

Posté : 20 avr. 2013, 18:56
par moogli
$upload_path = $_SERVER['DOCUMENT_ROOT']."/"; : le chemin du répertoire dans lequel le fichier doit être uploadé


$newname le nom du fichier, la concaténation est faite dans le script (dans le move_uploded_file).

@+

Re: upload fichiers

Posté : 20 avr. 2013, 20:02
par cdv
J'ai modifié la variable $newname en mettant le chemin cible, puis j'ai changé la variable $url avec le chemin concaténé et enfin l'upload_url et je me suis rendu compte que l'upload s'effectue toujours dans le dossier racine donc je crois que c'est le chemin par défaut et qu'il ne tient pas compte de cette variable.. Peut être il y a une erreur et du coup il n'en tient pas compte ?

Merci encore

A plus tard

Re: upload fichiers

Posté : 20 avr. 2013, 20:11
par moogli
montre code utilisé

Re: upload fichiers

Posté : 20 avr. 2013, 20:18
par AB
Ou sinon tu peux utiliser cette classe d'upload qui peut répondre à ce problème. La discussion et des exemples d'utilisation sont dans le lien déjà donné. La dernière version du code est sur ce lien. Elle gère aussi beaucoup d'erreurs ce qui t'évitera d'avoir à le faire si tu veux un script complet.

Re: upload fichiers

Posté : 20 avr. 2013, 21:49
par cdv
Un grand MERCI à tous les deux !!

j'ai réussi à adapter votre code cependant la page ne se recharge pas du coup il faut que je reclique que la page pour avoir le message de confirmation et du coup la photo se trouve en double mais au moins elle est bien dans le bon dossier!

Merci encore!!

Re: upload fichiers

Posté : 20 avr. 2013, 22:06
par AB
Quel code ?
S'il s'agit de celui de la classe, il suffit d'indiquer "reload" comme paramètre dans la fonction "Upload", comme mentionné dans les exemples.

Re: upload fichiers

Posté : 20 avr. 2013, 22:29
par cdv
J'ai pris le premier code : "Téléchargement de fichiers avec vérification et renommage" car le seconde me parait plus compliqué à comprendre

Re: upload fichiers

Posté : 21 avr. 2013, 15:11
par cdv
Bonjour,

j'ai réussi à régler mon problème cependant je ne vois pas ce que je dois mettre comme nom de serveur ou adresse pour la variable répertoire.
En effet j'ai mis l'adresse de mon site/images_upload mais j'ai l'erreur suivante : Chemin du dossier non valide
j'ai essayé aussi en mettant simplement 'images_upload' ou encore 'public_html/images_upload' mais rien à faire j'ai toujours la même erreur...
Peut être sauriez vous ce que je dois mettre dans cette variable ?
Merci!

Re: upload fichiers

Posté : 21 avr. 2013, 21:47
par AB
Il faut indiquer le chemin de ton dossier par rapport au répertoire www.

En fait pour construire le chemin du dossier, la classe utilise la variable $_SERVER['DOCUMENT_ROOT'] et concatène la valeur que tu fourni au résultat. Le chemin est donc construit comme ceci :
$dossier = 'images_upload';

$adresse_racine = (substr($_SERVER['DOCUMENT_ROOT'],-1) == '/')? $_SERVER['DOCUMENT_ROOT'] : $_SERVER['DOCUMENT_ROOT'].'/' ;

$adresse_repertoire = $adresse_racine.$dossier.'/';

// pour vérif
echo $adresse_repertoire;

//Ensuite la classe vérifie avec is_dir();
if(!is_dir($adresse_repertoire)) echo 'chemin du dossier invalide'; else echo 'chemin du dossier valide';


Re: upload fichiers

Posté : 21 avr. 2013, 22:45
par cdv
Merci beaucoup!
j'ai remplacé $adresse_racine par le chemin et ça marche parfaitement!
Un grand merci! :D
Bonne soirée