upload fichiers

cdv
Invité n'ayant pas de compte PHPfrance

19 avr. 2013, 16:08

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(); 
	
	}		
}
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 avr. 2013, 12:40

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.

@+
Il en faut peu pour être heureux ......

cdv
Invité n'ayant pas de compte PHPfrance

20 avr. 2013, 14:44

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 avr. 2013, 15:19

tu ne trouve pas la variable $newname ? O_o
Il en faut peu pour être heureux ......

cdv
Invité n'ayant pas de compte PHPfrance

20 avr. 2013, 18:24

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 avr. 2013, 18:56

$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).

@+
Il en faut peu pour être heureux ......

cdv
Invité n'ayant pas de compte PHPfrance

20 avr. 2013, 20:02

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 avr. 2013, 20:11

montre code utilisé
Il en faut peu pour être heureux ......

ViPHP
AB
ViPHP | 5818 Messages

20 avr. 2013, 20:18

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.

cdv
Invité n'ayant pas de compte PHPfrance

20 avr. 2013, 21:49

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!!

ViPHP
AB
ViPHP | 5818 Messages

20 avr. 2013, 22:06

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.

cdv
Invité n'ayant pas de compte PHPfrance

20 avr. 2013, 22:29

J'ai pris le premier code : "Téléchargement de fichiers avec vérification et renommage" car le seconde me parait plus compliqué à comprendre

cdv
Invité n'ayant pas de compte PHPfrance

21 avr. 2013, 15:11

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!

ViPHP
AB
ViPHP | 5818 Messages

21 avr. 2013, 21:47

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';


cdv
Invité n'ayant pas de compte PHPfrance

21 avr. 2013, 22:45

Merci beaucoup!
j'ai remplacé $adresse_racine par le chemin et ça marche parfaitement!
Un grand merci! :D
Bonne soirée