8768 sujets

Développement web côté serveur, CMS

Bonjour, étant débutant en PHP, et m'étant déjà documenté sur plusieurs sites internets, je reste dans une impasse due à mon faible niveau.

Voiçi donc mon problème : je souhaite faire une page d'administration d'un site vitrine d'un artiste.
Le développement de la page vitrine s'est déroulé sans problème en page statique (HTML5+CSS3+JQuery).
Mais là je bloque : je souhaite donc faire une page d'administration qui me permettrait d'uploader des images sur le répertoire web et de pouvoir indiquer leur nom.
J'ai effectivement trouvé un petit script sympa, mais il ne gère pas l'entrée personnalisée d'un nom...

Voici la page HTML avec le formulaire :
<html>
	<head>
		<title>Upload d'une image sur le serveur !</title>
	</head>
	<body>
		<form method="POST" action="upload.php" enctype="multipart/form-data">
			<label>Nom de l'oeuvre : </label><input name="nom" class="element text long" type="text" maxlength="255" value="">
			</br>
			<label for="image"> Choisir l'image : </label><input type="file" name="image">
			<input type="hidden" name="MAX_FILE_SIZE" value="100000">
			</br>
			<input type="submit" name="envoyer" value="Envoyer">
		</form> 
	</body>
</html>


Et voici le script PHP qui me permet d'uploader :

<?php
$dossier = 'upload/';
$fichier = basename($_FILES['image']['name']);
$taille_maxi = 100000;
$taille = filesize($_FILES['image']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['image']['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 ou jpeg...';
}
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']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
     {
          echo 'Upload effectué avec succès !';
     }
     else //Sinon (la fonction renvoie FALSE).
     {
          echo 'Echec de l\'upload !';
     }
}
else
{
     echo $erreur;
}
?>




Toute aide est la bienvenue, merci Smiley cligne
Modifié par Guillaume_SX (27 Jan 2016 - 18:11)
Bonjour,

Pour cela tu peux ajouter une zone de saisie à ton formulaire qui enverra le nom du fichier que tu désire.
Côté traitement, tu récupère ta valeur comme. Si elle existe tu vérifie sa conformité et si elle est correcte tu l'utilise en lieu et place de l'original pour l'enregistrement du fichier sur le serveur.

Une fois le fichier correctement enregistré, je te conseil de te pencher sur le sujet des CHMOD soit les droits accordés aux répertoires et aux fichiers.
Les CHMOD, je connais, le champ de texte, il y est déjà, mais je crois que c'est avec movefile mais j'arrive pas comprendre la commande... Smiley ohwell
si je ne m'abuse move_uploaded_file() est une commande déplacement de fichier et non de copie.

Les fichiers concernés viennent d'un disque dur ou sont déjà sur le serveur ?
Modifié par Greg_Lumiere (27 Jan 2016 - 18:48)
JENCAL a écrit :
salut,

quel est ton message d'erreur ?

Aucun justement, l'upload fonctionne bien mais n’intègre pas la fonction de renommage, c'est justement ce que je demande Smiley cligne
Greg_Lumiere a écrit :
Il semble manquer un slash entre $dossier et $fichier dans la fonction move_uploaded_file()

Justement je pense que non, enfaite ce qui est là est en théorie juste, j'ai récup le script sur OCR, mais je ne sais pas l'adapter ;(
Disons que dans ton script là tu semble ne pas récupérer la valeur de ton input qui te sers sur ton formulaire à préciser le nom du fichier.


Je pense qu'il faudrait

- récupérer la valeur de l'input et l'affecter à une variable

- juste avant la vérification portant sur le nom du fichier,
vérifier l'existence de la variable du nom de fichier personnalisé

- tester la conformité du nom (la saisie utilisateur si elle existe, sinon le nom d'origine du fichier).

- enfin, définir une variable qui contiendra le nom de fichier final qui est retenu ; cette variable s'insèrera à la ligne "move_upload..." en lieu et place de la variable $fichier actuelle.


Qu'en penses-tu ?