Aller au contenu

Articles marqués ‘ajax’

21
oct

Copier un fichier distant sur son serveur

Dans un article précèdent, j’évoquais la possibilité de transférer un fichier distant sur son propre serveur à l’aide d’une connexion socket sur le port 80. Il s’agit du protocole HTTP utilisé par nos navigateurs préférés.

Cet article fait donc office de suite à celui rédigé précédemment. Désormais, la copie se réalise par le biais d’un formulaire classique qui va réaliser une requête AJAX d’initialisation, puis, retourner le lien de téléchargement du fichier nouvellement copié sur votre serveur.

La classe qui réalise la connexion socket, puis la copie, a été mise à jour afin d’ajouter de nouvelles fonctionnalités utiles pour mettre en place une barre de progression (pas développée dans les sources que j’ai mis à votre disposition). Hormis les fichiers de grande taille (plus de 10 mo), une barre de progression ne servirait strictement à rien, en effet la copie se réalise de serveur à serveur, donc des machines très puissantes à très haut débit !

Il peut être intéressant d’implémenter une barre de progression. En fonction des retours, je pourrai éventuellement m’en occuper.

Télécharger les sources

22
mai

Comprendre AJAX à l’aide de jquery

On ne présente plus le framework jquery tant il est utilisé à travers le web, aussi bien pour les possibilités qu’il offre coté client, que pour sa facilité d’utilisation. Pour plus d’informations, visitez le site officiel ici.

Dans cet article, je vais l’utiliser pour réaliser de petits traitements en AJAX, récupérer l’heure du serveur et votre adresse IP de manière asynchrone (aucun rafraichissement de votre navigateur).

Voir l’exemple

Pour synthétiser le fonctionnement, jquery va envoyer des informations au serveur via la méthode POST ou GET, puis récupérer un résultat (la réponse). Vous l’aurez donc compris, il nous faudra aussi un fichier PHP pour récupérer l’action à réaliser.

Coté client (code javascript):

<script type="text/javascript">
    $(document).ready (function () {
        var ajax = function (a, callback) {
            $.ajax ({
                url: 'ajax.php',
                type: 'POST',
                data: ({action:a}), // Paramètre POST
                success: function (data) {
                    callback (data);
                }
            });
        } // ajax ();

        // ... autres fonctions ...

        var alert_heure = function (data) {
            alert ('Heure du serveur: '+data.heure);
        } // alert_heure ();

        $('button.heure').click (function () {
            ajax ('heure', alert_heure);
        });
    });
</script>

$(‘button.heure’) correspond à l’élément HTML <button/>, et heure à sa classe (voir les sources HTML). Sur ce bouton, j’y applique un écouteur ‘onclick’ qui sera déclanché lorsque l’utilisateur cliquera sur ce bouton.

Lors du clique, ma fonction ‘ajax’ est appelée, c’est elle qui se charge de réaliser ma requête AJAX à l’aide de jquery. Le premier paramètre va permettre à mon script PHP de trouver le traitement à réaliser, le second, est une fonction callback qui sera appelée lorsque le serveur m’aura retourné une réponse. Je procède de la sorte dans un souci de généricité, car dans la pratique de ce tuto, il y aura 2 types de requête bien différentes, afficher l’heure du serveur ou votre adresse IP.

Après une rapide analyse du code, vous observez que c’est le fichier ‘ajax.php’ qui sera lancé coté serveur.

Coté serveur (code php):

$action = $_POST['action'];

// ...

switch ($action) {
    case 'heure':
        echo echoJSON (array ('heure'=>date ('H\hi\ms\s')));
    break;
    case 'ip':
        echo echoJSON (array ('ip'=>$_SERVER['REMOTE_ADDR']));
    break;
}

Après avoir analyser le type d’action à réaliser switch ($action) {}, notre script PHP va se contenter d’afficher un résultat avec ‘echo’, c’est la réponse, et c’est ce que réalise la fonction echoJSON ();. J’ai pris pour abitude de structurer mes données dans du JSON, c’est plus propre et plus facilement maniable.

Conclusion

jquery nous simplifie la vie, à mes débuts, ce type de framework n’existait pas encore et il fallait tout développer soit-même, pour obtenir un résultat qui ne fonctionnait pas forcément sur tous les navigateurs et avec beaucoup moins de possibilités!

Cependant, jquery n’est pas le seul framework proposant ce type de fonctionnalité, il y a aussi prototype et sciptaculous que j’utilisais beaucoup autrefois mais qui restent à mon sens, beaucoup moins performants que jquery.

Cet exemple montre une infime partie des possibilités offertes par AJAX. Puisqu’un script PHP est appelé, pourquoi ne pas consulter une base de données, générer des fichiers textes voire des images … les possibilités sont infinies!

Télécharger les sources

8
mai

Barre de progression pour upload en PHP/AJAX/APC

Dans ce nouvel article, nous allons voir comment utiliser le cache APC (voir ici pour son installation), afin de réaliser une barre de progression lors de l’upload de vos fichiers. L’utilisation de cette méthode apporte de nombreux avantages:

  • elle met en attente l’utilisateur sans pour autant geler le navigateur ;
  • l’utilisateur peut voir la progression de l’upload ;
  • il n’y a plus de limite en terme de poids.

Toutefois, il faut des connaissances solides en PHP et JavaScript, comprendre le fonction asynchrone en AJAX, et je ne parle même pas du fonctionnement du cache APC.

Je ne vais pas détailler tout le code à mettre en place ou mon article serait trop long et fastidieux à lire. En revanche j’ai pris la peine de réaliser un petit schéma explicatif. Les images sont libres de droits et téléchargées ici.

Si vous avez bien compris, tout se passe de manière asynchrone en AJAX. Pour faire simple, le navigateur n’a pas été rechargé, mais au moins une requête a été envoyée au serveur (1). Cette requête à pour but de lancer un script PHP, qui va consulter le cache APC (2) et nous retourner diverses informations (nom du fichier, son poids total etc…). Une fois toutes ces informations récupérées, le navigateur (le code JavaScript en réalité) va lire la réponse du serveur, qui se trouve être du JSON très facile à utiliser pour nos besoins. Il nous reste plus qu’à mettre à jour (3) notre barre de progression.

Voici le résultat pour le même fichier à transférer:

Composition des sources:

  • ./js/prototpye/*
  • ./js/scriptaculouts/*
  • ./js/img/*./js/cupload.js
  • ./js/cprogressbar.js
  • ./js/cprogressbar.css
  • ./upload/
  • ./index.html
  • ./upload.php

Le code JavaScript qui gère l’upload (AJAX + Barre de progression) se trouve dans le fichier cupload.js. Le script appelé pour la consultation du cache APC et qui retourne du JSON est dans upload.php.

Ces sources datent de l’année dernière, je les ai adapté pour réaliser ce petit tuto. Il y a des améliorations à apporter notamment au niveau de la validation des fichiers (jpg, jpeg, png etc…). En effet il serait dangereux voire suicidaire d’autoriser l’upload de fichiers PHP par exemple. N’oubliez pas de donner les droits suffisants au répertoire upload qui va contenir tous vos fichiers transférés. Dans un prochain tuto, nous verrons la démarche à suivre pour réaliser le même type d’upload (avec barre de progression) mais avec Flex cette fois-ci!

Télécharger les sources