PHProject

Un projet ENSISA

Voici le premier tutorial pour utilisateurs avancés : l’upload d’images (ou envoi d’images).
Ce tutorial est un peu plus complexe que les autres publiés jusqu’à maintenant car il fait appel à une multitude de fonctions que nous tenterons d’éclaircir pour vous. Ce script sera composé de deux fichiers utiles à la gestion d’erreur. Au finale le script sera capable de : reconnaître que le fichier est une image, limiter la taille de l’image, afficher un texte d’upload raté/réussi ainsi que l’image uploadée et le lien static de celle-ci pour l’intégrer à d’autres sites par exemple.
Débutons par le formulaire :

Le formulaire d’envoi doit spécifier en action : action=”Envoi_images.php”. Ceci est nécessaire pour spécifier au formulaire que Envoi_images.php sera le fichier qui traitera la commande. Ensuite, nous entrons la taille maximale du fichier. Son type est à « hidden », cela signifie qu’il est invisible à l’utilisateur mais pas pour le serveur. Le reste est du HTML standard.

<form enctype="multipart/form-data" action="Envoi_images.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="5000000">
<input type="file" name="img" size="50">
<p><input type="submit" name="envoi" value="Envoyer l'image">
</form>

Comme tout script PHP avec formulaire, il faut tester si le bouton « envoyer » a bien été cliqué

if(!isset($_POST['envoi']))

Si envoi a été cliqué, il faut inclure le fichier secondaire pour afficher le formulaire !

include("formulaire_envoi.inc");

Il paraît évident que si le fichier est trop grand, que ce n’est pas une image, ou qu’il y a eu une erreur quelconque, l’utilisateur doit en être informé

	if($_FILES['img']['tmp_name'] == "none")
	{
		echo "<b>Il y a eu un problème. Soit votre fichier n'est pas une image, soit il dépasse les 5Mo.<br>";
		include("formulaire_envoi.inc");
		exit();
	}
	if(!ereg("image",$_FILES['img']['type']))
	{
		echo "<b>Le fichier n'est pas une image!</b><br>";
		include("formulaire_envoi.inc");
		exit();
	}

Dans le code ci-dessus,$_FILES[’img’][’tmp_name’] == “none” teste si le fichier temporaire créé lors de l’upload est disponible. S’il ne l’est pas, une erreur est survenue! On informe l’utilisateur. Ensuite, le test suivant !ereg(”image”,$_FILES[’img’][’type’]) va essayer de voir si le fichier est une image. «int ereg ( string $pattern, string $string [,array &$regs]): recherche dans la chaîne string les séquences de caractères qui correspondent au masque pattern, en tenant compte de la casse ». (PHP.net)

Quand tous les tests ont réussis :
Il faut dorénavant specifier la destination d’enregistrement de l’image : ici nous la mettrons à la racine du dossier dans lequel se trouve le script. Il est également de rigueur de définir un fichier temporaire lors de l’upload.

$destination = $_FILES['img']['name'];
$fichier_temporaire = $_FILES['img']['tmp_name'];

« move_uploaded_file ( string $filename , string $destination ) s’assure que le fichier filename est un fichier téléchargé par HTTP POST. Si le fichier est valide, il est déplacé jusqu’à destination. Ce type de vérification est spécialement important s’il est possible que les fichiers téléchargés révèlent leur contenu à l’utilisateur, ou même aux utilisateurs du même système ». (PHP.net)

move_uploaded_file($fichier_temporaire,$destination);

Enfin, les quelques lignes supplémentaires sont uniquement pour la commodité de l’utilisateur : confirmation de l’envoi avec taille de fichier, affichage de l’image envoyée, affichage du lien statique de l’image (attention, ici l’image es stockée dans ../fich/upload/image.jpg, ce qui peut différer sur votre serveur!)

echo "<p><b>L'image a bien été envoyée: </b>{$_FILES['img']['name']} ({$_FILES['img']['size']} octets)</p>";
echo "<img src=".$destination." width='400' />";
echo "<p>Le lien de l'image est: http://".$_SERVER["SERVER_NAME"]."/fich/upload/".$destination;
echo "<p> <a href='Envoi_images.php'>retour</a>";

Télécharger Envoi d’images

  • 0 Comments
  • Enregistré sous: Tutorial
  • Tutorial : accès privé

    Aujourd’hui nous allons nous familiariser avec les accès privés. Pour bien comprendre le principe, nous allons prendre le cas d’une connexion à un seul utilisateur (comme un admin par exemple) et tester l’accès à des pages privées. Pour ce faire, il est nécessaire d’avoir des connaissances en HTML, en effet il faut réaliser un formulaire de connexion. Cette technique ne sera pas développée ici, mais sera disponible dans les sources plus bas.
    Commençons :
    Dans la page accessible au serveur, index.html, nous développerons deux parties : un accès publique et un accès privée. Comme c’est un exemple, nous ne considérons pas la forme de la chose (pas de CSS attaché).

    <p><a href="pagepublique.html">accès public</a>
    <a href="accesprive.php">accès privé</a></p>
    <p><a href="accesprive.php" class="Style1">un</a></p>
    <p><a href="accesprive.php" class="Style2">deux</a></p>
    <p><a href="accesprive.php" class="Style3">trois</a></p>
    <p><a href="accesprive.php" class="Style4">quatre</a></p>
    <p><a href="accesprive.php" class="Style5">cinq</a>
    

    Cette page très sommaire peut être enrichie, mais ce n’est pas le but. Vous remarquerez l’accès aux différents fichiers PHP d’accès privé.
    Justement, passons aux choses sérieuses :
    L’accès privé. PHP impose à ses utilisateurs de mettre tout en haut d’un fichier à accès privé la chose suivante :

    <?php
    session_start();
    ?>
    

    « session_start() crée une session (ou restaure celle trouvée sur le serveur, via l’identifiant de session passé dans une requête GET, POST ou par un cookie) » (PHP.net)
    Au final, il est important de vérifier si les champs login et mot de passe sont bien renseignés avec les bonnes données dans quel cas on enverra “$_SESSION[’acces’]=”oui” et le nom de l’utilisateur sera transféré par la même occasion : $_SESSION[’nom’]=$_POST[’login’]. (un test vrai-faux est nécessaire : if/else)

    <?php
    session_start();
    if($_POST['login']=="benoit" &amp;amp;amp;amp;&amp;amp;amp;amp; $_POST['pass']=="remi")
    {
    $_SESSION['acces']="oui";
    $_SESSION['nom']=$_POST['login'];
    echo "Vous avez été authentifié";
    }else echo "Vous n'êtes pas authentifié";
    ?>
    

    Une fois connecté avec le bon login et mot de passe (ici login: benoit, mot de passe: remi) toutes les pages privées doivent débuter avec le session_start() expliqué plus haut. De plus, il faut tester si la personne qui visite la page, dispose des droits nécessaires, c’est à dire si l’accès a été accordé.

    if($_SESSION['acces']!="oui")
    {
    header("Location:accesprive.php");
    }
    

    D’autres fonctionnalités annexes ont été rajoutées ici comme par exemple le nombre de visites sur les pages privées, ou encore l’affichage du statut de la connexion (connecté, non connecté). Il faut néanmoins savoir qu’il est beaucoup plus intéressant de créer des logins par MYSQL. Ce point sera traité ultérieurement.

    Vous pouvez télécharger les sources ici :
    Télécharger Accès privé

  • 0 Comments
  • Enregistré sous: Tutorial