IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Commande shell et progression


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut Commande shell et progression
    Bonjour,

    Je vous explique mon soucis.
    Après l'upload d'un fichier, je dois effectuer un traitement sur le dit fichier via un script shell (shell_exec(ma_commande fichier_source fichier_destination)). Jusque là pas de soucis.

    Sauf que le temps d'exécution de la commande dure plus ou moins de temps en fonction de la taille du fichier.

    J'aimerais connaitre la progression de la tâche. C'est possible de savoir où en est là commande en question : je récupère la taille du fichier de destination et je la compare à la taille du fichier source. J'applique ensuite un produit en croix et je connais le pourcentage d'avancement;

    Par contre par quel moyen puis je y arriver de manière dynamique ?
    Je tester l'ensemble iframe + ajax, sauf que mon shell_exec est bloquant et du coup empêche mes autres requêtes AJAX de se faire.

    Des idées ?

    Bonne journée.

  2. #2
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    Effectivement la commande shell_exec doit être bloquante. Je ne vois pas de moyen 'simple' là maintenant mais peut-être la solution serait ici :
    Le système de contrôle des processus de PHP implémente un système de création, gestion et terminaison des processus comme sous Unix. Cette extension ne doit pas être activée pour une utilisation en serveur web, car les résultats pourraient être inattendus.

    Cette documentation explique l'utilisation générale des fonctions du gestionaire de processus. Pour des informations plus détaillées sur le contrôle des processus Unix, nous vous encourageons à consulter votre documentation système, incluant notamment fork(2), waitpid(2) et signal(2), ou bien à compulser un ouvrage de référence comme "Advanced Programming in the UNIX Environment" par W. Richard Stevens (Addison-Wesley).

    PCNTL utilise maintenant les ticks comme mécanisme de callback du gestionnaire de signaux, ce qui est beaucoup plus rapide que la version précédente. Ce changement suit la même sémantique que l'utilisation de "ticks utilisateurs". Vous utilisez declare pour spécifier les endroits de votre programme où les callbacks peuvent être appelés. Cela vous permet de minimaliser la consommation dûe à la gestion d'événements asynchrones. Par le passé, compiler PHP avec pcntl revenait toujours à souffrir cette consommation, même si votre script n'utilisait pas pcntl.

    Il y'a un ajustement à faire pour tous les scripts pcntl basés sur une version antérieure à PHP 4.3.0 afin qu'ils puissent fonctionner : il faut soit utiliser declare dans la section où vous voulez avoir le callback, soit l'activer pour tout le script avec la nouvelle syntaxe globale de declare .
    Note

    Cette extension n'est pas disponible sur les plates-formes Windows.
    Je ne sais pas ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut
    Salut,

    Sinon peut être avec un script perl qui se load au submit d'un formulaire fictif et qui du coup va me faire l'équivalent d'un "du chemin_mon_fichier" a intervalle régulier sur le nouveau fichier en cours de traitement afin de connaitre l'avancement du traitement.

    Bonne journée.

  4. #4
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    Sinon il faudrait utiliser AJAX. Quand tu valides le formulaire la page de traitement du formulaire lances un appel AJAX une fois les vérifications terminées. Pendant que ce script effectue les traitement sur le fichier, un autre script lui ne fait que donner l'état du traitement.

    Je récapitule, il faut 4 fichiers :

    • Le formulaire XHTML
    • Le script de traitement principal, nous dirons form.php
    • Le script de traitement du fichier, file.php
    • Le script qui retourne l'avancement, progress.php

    Le formulaire soumet à form.php. form.php vérifie les données puis lances une requête AJAX sur file.php qui lui traite le fichier. Juste après cet appel AJAX (asynchrone), form.php appel tout les X secondes le script progress.php (toujours en AJAX). progress.php ne fait que retourner la progression, directement en pourcentage (comme tu l'as dit un produit en croix avec la différence de taille).

    C'est vraiment très simple à faire et les scripts sont légers.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut
    Oui, je pense que c'est la meilleure solution.
    Je teste ça dans la journée.

    Merci du coup de main .

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Par défaut
    A priori ca ne fonctionne pas. La requête de progression se lance bien, mais je n'ai pas de résultat tant que celle de traitement ne s'est pas terminé .

Discussions similaires

  1. [Système]Execution d'une commande shell
    Par n8ken dans le forum API standards et tierces
    Réponses: 24
    Dernier message: 29/03/2007, 05h36
  2. []Commande shell
    Par phoenix736 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 09/10/2005, 21h31
  3. [Debutant] Commande shell
    Par drosophile dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 21/04/2005, 16h06
  4. commande shell dans un programme
    Par diefo dans le forum C
    Réponses: 3
    Dernier message: 15/08/2003, 14h37
  5. [VB6] comment savoir si la commande shell est terminée ?
    Par ghyscharlotte dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/07/2003, 20h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo