Function pour upload

Eléphant du PHP | 440 Messages

11 nov. 2009, 21:25

bonsoir à tous,

je voudrait mettre dans une fonction une fonction upload:
function upload_image($dossier,$_FILES['image_fichier'])
{
if ( $dossier == null || $_FILES['image_fichier'] == null) 
{
echo "erruer";
}
else
{
$fichier = basename($_FILES['image_fichier']['name']);
$taille_maxi = 100000;
$taille = filesize($_FILES['image_fichier']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['image_fichier']['name'], '.'); 
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier, 
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     if(move_uploaded_file($_FILES['image_fichier']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
     {
	 
			//$'image_fichier'= $dossier.$fichier;
			$'image_fichier'=$fichier;
			chmod("../img/galerie/$'image_fichier'", 0644);
			//echo $'image_fichier';
          echo 'Upload effectué avec succès !';
     }
     else //Sinon (la fonction renvoie FALSE).
     {
          echo 'Echec de l\'upload !';
     }
}
else
{
     echo $erreur;
}
}
}
mais cela bloque:
Parse error: syntax error, unexpected '[', expecting ')' in D:\Program Files\UwAmp\www\4dm1n\fonction\fonction_admin.php on line 8

On ne peut pas mettre dans une fonction ceci: $_FILES['image_fichier'] ???

Merci d'avance

guigui69

ViPHP
fab
ViPHP | 2657 Messages

11 nov. 2009, 21:40

Effectivement tu ne peux pas! Les noms de variables ainsi placées dans la déclaration de la fonction auront une portée interne à la fonction rien de plus et là tu essayes de passer une variable qui correspond à une variable globale donc réservé par php! Il faut donc que dans ta déclaration tu changes le nom mais lors de l'utilisation de ta fonction tu es libre de transmettre ce que tu veux :)
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

ViPHP
ViPHP | 1996 Messages

11 nov. 2009, 21:42

Hmmm les Supervariables ($_GET, $_POST, $_SESSION, $_FILES) passe les barrières des fonction normalement...
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

ViPHP
fab
ViPHP | 2657 Messages

11 nov. 2009, 21:44

Oui mais tu peux utiliser les noms de variable réservés en tant que paramètre de ta fonction :)
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 440 Messages

11 nov. 2009, 23:50

Merci pour votre aide,


sur ma page ou j'appel cette fonction j'ai noté ceci:
upload_image($dossier,$_FILES['url_mini_image']);
et voici ma fonction:
<?php
function upload_image($dossier,$image)
{
if ( $dossier == null || $_FILES['image_fichier'] == null) 
{
echo "erruer";
}
else
{
$fichier = basename($_FILES['image_fichier']['name']);
$taille_maxi = 10000000000000;
$taille = filesize($_FILES['image_fichier']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['image_fichier']['name'], '.'); 
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier, 
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     if(move_uploaded_file($_FILES['image_fichier']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
     {
	 
			//$'image_fichier'= $dossier.$fichier;
			$image_fichier=$fichier;
			chmod("../img/galerie/$image_fichier", 0644);
			//echo $image_fichier;
          echo 'Upload effectué avec succès !';
     }
     else //Sinon (la fonction renvoie FALSE).
     {
          echo 'Echec de l\'upload !';
     }
}
else
{
     echo $erreur;
}
}
}
?>
et je comprend pas pourquoi ca marche (oui oui ca marche), dans ma fonction je n'ai modifier que

$_FILES['image_fichier'] en $image, mais rien après et pourtant ca marche pourquoi ?

guigui69

ViPHP
fab
ViPHP | 2657 Messages

12 nov. 2009, 03:14

Car tu l'as pas renommé dans tout le reste de la fonction peut être :)
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 440 Messages

12 nov. 2009, 09:27

D'accord mais c'est bizarre avec cette fonction (ci-dessus) je suis a réalisé l'upload juste en changeant le $_FILES dans la déclaration de la fonction.

Et j'ai refait un essai après j'ai eu des erreurs, la je suis un peu perdu.

tu me conseilles de faire comment?Doit-je enlever complètement $_FILES de la déclaration, le renommer?


Merci d'avance

guigui69