Téleverser un fichier - Activer / désactiver un bouton
Le choix du fichier à envoyer se fera soit par choix de son nom soit par un glisser-déposer sur une « dropzone ».
Dans cet exemple nous allons téleverser une image PNG de 5 ko maximum. Cette image sera transmise à notre script « exemples_ajax.php ». (Voir paragraphe suivant)
On utilise une balise INPUT de type FILE cachée; un click sur la dropzone lui est transmis mais le fonctionnement peut demander quelques secondes aussi faut-il montrer l'image AJAXLOADER pendant le traitement. (Voir le ONCLICK)
La fonction « InitDrag() » est appelée par l'évenement ONLOAD de la balise BODY qui désactive aussi le bouton ENVOYER. Ensuite les fonctions « FileDragHover(event) » et « FileSelectHandler(event) » permettent de sélectionner un fichier.
Onclick du bouton envoyer permet, si le bouton est actif, d'exécuter la fonction Upload(). Celle-ci crée un objet FormData, le remplit avec les données et l'envoi. En raison de l'ojet FormData l'envoi se fera en mode POST.
Le résultat de l'encodage du fichier par le script PHP est ensuite affiché.
Le script PHP « exemples_ajax.php » - Colorisation du code source - Encodage en base64
Ce script PHP répond aux requêtes AJAX. Il attend au minimum un paramètre : « Action ». Sa réponse contient une ligne de paramètres séparés par des TAB puis après le RC les données. Le premier paramètre retourné sera un code ACTION.
Pour chaque code ACTION un traitement est effectué et le résultat renvoyé.
► L'action VCO colorise le texte du code source grâce à la bibliothèque Highlight-PHP. (Voir paragraphe suivant)
► L'action UPL récupére un ficher PNG précédemment téléversé et l'encode en base64. (Voir paragraphe précédent)
► L'action HIG empaquette la bibliothèque Highlight-PHP dans un fichier ZIP et descend celui-ci au client (Voir paragraphe suivant)
La bibliothèque Highlight-PHP - Création d'un fichier ZIP - Utilisation d'un itérateur récursif
L'installation de cette bibliothèque (
https://github.com/scrivo/highlight.php
) se fait normalement avec l'outil COMPOSER assez compliqué d'usage; j'ai simplifié grâce à un fichier autoload.php. ( Ici je viens d'ajouter un style pour que mes liens externes apparaissent dans un pavé gris. )
Je n'ai conservé que deux thèmes et les définitions des langages utilisés sur le web.
Afin de proposer en téléchargement ma version light de Highlight-PHP j'ai ajouté une ACTION dans le script « exemples_ajax.php ». Elle crée à la volée un fichier ZIP et le renvoi en téléchargement.
Au passage on étudie la création d'un fichier ZIP et l'utilisation d'un itérateur récursif (Qui évite d'utiliser une fonction récursive) pour parcourir l'arborescence des fichiers.