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 :

[Système] Exécution d'une application en passant par PHP [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 73
    Points
    73
    Par défaut [Système] Exécution d'une application en passant par PHP
    Environnement:
    Windows XP Pro
    Service Pack 3 / .Net 3.5
    Apache 2.2.11
    PHP 5.2.9-2

    Bonjour à tous.

    Dans un projet de site web, je dois convertir des formules mathématiques en image .png avec LaTeX en passant par PHP. Le problème que j'ai, est quand j'appel LaTeX, le programme prend une éternité à s'exécuter et PHP "plante" après que le timeout soit dépassé.
    PHP Fatal error: Maximum execution time of 30 seconds exceeded in C:\WWW\lc.workspace.com\site\index.php on line 44
    Et ce, même si tout s'est bien passé avec latex.exe sans erreur. Pourtant, en ligne de commande ce processus prend une fraction de seconde à s'éxécuter sans erreurs. Comme mentionné dans d'autres post sur le forum, j'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ini_set("max_execution_time", "240");
    au début de mon code PHP ce qui "règle" le problème du plantage, mais le processus latex.exe prend quand même 2 minutes 47 secondes à s'éxécuter. Ce qui est beaucoup trop long puisque latex.exe peut être exécuter plusieurs fois dans une même page pour générer différentes formules mathématiques.
    J'ai essayé les commandes exec(), shell_exec(), popen()/pclose(), toutes sans succès, voici quelques exemples que j'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    exec($commande);
    exec($commande . " >NUL");
    exec("start /B " . $commande);
    shell_exec($commande);
    pclose(popen("start ". $commande, "r"));
     
    $output = array();
    $result = null;
    $return = exec($command, $output, $result);
    ou
    exec('start /B "'.$commande.'"', $output, $return);
    ainsi que plein d'autres variantes que je ne me souviens plus. Aucune ne fonctionne, latex.exe prend toujours environ 2 min 40 sec à s'éxcuter en passant par PHP.

    Une fois le problème du timeout réglé, je n'ai plus aucun message d'erreur dans les logs de Apache.

    Dans php.ini, safe_mode est à off et disable_functions est à Off comme suggéré ailleurs.

    Je ne sais plus où me diriger, quelqu'un a une autre idée dans quelle autre direction je pourrais chercher?

    Merci de votre aide.

    Sébastien.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    Si le processus prend une fraction de second en ligne de commande. Il ne devrait gere excéder quelques seconds en PHP. Je ne pense pas que le probleme vienne de ton script.

    Essaye de voir les permissions, essaye par exemple de créer un fichier dans le dossier ou tu dois créer ton rapport.

    Essaye d'executer une commande simple comme DIR, COPY...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par batataw Voir le message
    Si le processus prend une fraction de second en ligne de commande. Il ne devrait gere excéder quelques seconds en PHP. Je ne pense pas que le probleme vienne de ton script.

    Essaye de voir les permissions, essaye par exemple de créer un fichier dans le dossier ou tu dois créer ton rapport.

    Essaye d'executer une commande simple comme DIR, COPY...
    Ok, testé, voici ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    chdir($path);
    // dossier courant
    echo getcwd() . "<br/>";
     
    $output = array();
    $result = null;
    $command = "dir *.*";
    exec($command, $output, $result);
    Et voici le résultat contenu dans $output.
    output:
    Array
    (
    [0] => Volume in drive C has no label.
    [1] => Volume Serial Number is 500A-2149
    [2] =>
    [3] => Directory of C:\WWW\lc.workspace.com\site\tmp
    [4] =>
    [5] => 2009-06-09 10.48 <DIR> .
    [6] => 2009-06-09 10.48 <DIR> ..
    [7] => 2009-06-08 12.23 215 2f7eaf16eceec07fc19c93090e90033a.tex
    [8] => 2009-06-09 11.23 9 c0ec8631c0327e613311aa7f4a48e553.aux
    [9] => 2009-06-09 11.23 564 c0ec8631c0327e613311aa7f4a48e553.dvi
    [10] => 2009-06-09 11.23 7ÿ043 c0ec8631c0327e613311aa7f4a48e553.log
    [11] => 2009-06-09 09.32 215 c0ec8631c0327e613311aa7f4a48e553.tex
    [12] => 5 File(s) 8ÿ046 bytes
    [13] => 2 Dir(s) 66ÿ263ÿ986ÿ176 bytes free
    )
    Le tout ayant pris une fraction de seconde.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    Essaye d'utiliser la commande COPY.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par batataw Voir le message
    Essaye d'utiliser la commande COPY.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $command = "copy 2f7eaf16eceec07fc19c93090e90033a.tex 2f7__.bkp";
    exec($command, $output, $result);
    Résultat:
    output:
    Array
    (
    [0] => 1 file(s) copied.
    )
    Exécution: Fraction de sec.
    Fichier bel et bien créé.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 73
    Points
    73
    Par défaut
    Par rapport aux permissions, j'ai remarqué que mes dossiers à la racine de mon répertoire web qui contient tous mes sites sont tous en lecture seule (crochet grisé dans les propriétés du dossier) et je ne peux pas le changer... quand je le change, je refais "propriété" sur le dossier et tous est revenu comme avant... serait-ce une piste? Qu'est-ce qui remet en lecture seule sans que je le sache?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 73
    Points
    73
    Par défaut
    Je viens de trouver quelque chose qui pourrait être intéressant.

    J'ai réessayé l'éxécution de latex.exe en me positionnant dans le répertoire courant avec chdir() directement avec le fichier (sans utiliser de répertoire.) comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $command = "latex --interaction=nonstopmode c0ec8631c0327e613311aa7f4a48e553.tex";
    exec() me retourne 1, donc erreur et rien ne se passe, latex.exe n'est pas exécuté.
    Citation Envoyé par error.log
    'latex' is not recognized as an internal or external command, operable program or batch file.
    Pourtant quand je fais la même commande en ligne de commande, en me positionnant dans le répertoire, tout fonctionne...

    Bizarre.

    P.S.: Le chemin où se trouve latex.exe est bien dans la variable d'environnement de windows et est belle et bien reconnue.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    Peux-tu essayer avec le nom absolu

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par batataw Voir le message
    Peux-tu essayer avec le nom absolu
    Oui, avec le nom absolu, ça fonctionne.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    Au final ça fonctionne ou tu as toujours le problème du temps d'exécution ?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par batataw Voir le message
    Au final ça fonctionne ou tu as toujours le problème du temps d'exécution ?
    Bah, quand je dis "ça fonctionne", ça veut dire que latex.exe est exécuté, mais il prend toujours plus de 2 minutes à s'éxécuter...

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 73
    Points
    73
    Par défaut
    *** Mise à jour ***

    J'ai décidé de regarder ce qui se passait avec le processus dans "Windows Task Manager". C'est vraiment bizarre, quand j'exécute latex.exe en passant par PHP, l'utilisation du processeur grimpe dans les 90% d'utilisation (ça oscille entre 80% et 100%) pendant les 2 minutes et quelques. Quand latex.exe termine, tout redevient à la normale... Quand j'exécute latex.exe par la ligne de commande, j'ai peine à voir le processus dans le Task Manager et l'utilisation du processeur ne bouge pas vraiment, à peine 1% (peut-être attribuable à d'autres processus autour d'ailleurs!). Je ne crois pas que ce soit normal !! Qu'est-ce que vous en pensez?

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 73
    Points
    73
    Par défaut
    *** Mise à jour ***

    Après plusieurs essais et ratés, j'ai décidé de me faire un petit environnement de test et installer EasyPHP 3.0. Juste pour voir ce qui se passerait. Et devinez quoi? Tout fonctionne à la perfection. Alors maintenant, je sais que je suis sur le bon chemin.

    J'ai commencé par comparer les fichiers de configuration (httpd.conf et php.ini) avec les originaux avec un outil de comparaison de fichiers. Ce qui est bizarre, c'est que les fichiers de configuration sont virtuellement identiques (Sauf pour des choses comme la variable $path ajouté par EasyPHP).

    J'ai retesté avec la version de Apache et PHP que EasyPHP utilise. Même problème... même avec un php.ini et httpd.conf identique. Il doit bien y avoir quelque chose que EasyPHP fait que je ne fais pas !

    Maintenant, je sais que c'est possible de faire fonctionner cela parceque ça fonctionne avec EasyPHP. Mais je ne trouve pas ce qui est différent.

    Est-ce que ça aide quelqu'un à m'aider?

    Merci beaucoup.
    Sébastien

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Points : 73
    Points
    73
    Par défaut
    Ok, je suis allé sur PHP.net pour voir les "bug reports". Il y a plein de gens avec le même problème que moi. Mais l'équipe de PHP et l'équipe de Apache semblent se lancer la balle face à ce problème. L'équipe de PHP dit que le problème vient d'Apache et l'équipe d'Apache dit que le problème vient de PHP. Allez savoir !

    Maintenant, je me demandais qu'est-ce que EasyPHP fait que moi je ne fais pas en installant manuellement. Parcequ'avec une configuration à 100% identique, le problème ne se présente pas quand j'utilise EasyPHP. J'ai découvert que EasyPHP ne démarre pas Apache en tant que Service Windows. Alors j'ai tout réinstallé et j'ai fait démarré Apache en tant qu'application Windows. Devinez quoi? Le problème est disparu ! Le problème semble se présenter quand Apache est démarré en tant que Service. Bon, maintenant j'ai cette fenêtre cmd.exe énervante dans ma barre des tâches de Windows, mais au moins, tout fonctionne selon mes besoins. Je vais probablement répondre à quelques "bug reports" sur le site de PHP... ça pourrait en aider d'autres, qui sait?

    Merci beaucoup à tous pour votre aide. Je pense que j'ai vraiment tout essayé sur ce coup là !

    Merci encore.

    Sébastien

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Bonjour, je pense avoir le même problème que toi. Pourrais tu m'indiquer le ou les numéros des rapports de bug ? Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/07/2006, 21h54
  2. Exécution d'une application dans un formulaire
    Par julio02200 dans le forum Access
    Réponses: 1
    Dernier message: 13/06/2006, 14h37
  3. Comment faire un exécutable d'une application access
    Par b_steph_2 dans le forum Runtime
    Réponses: 4
    Dernier message: 09/02/2006, 16h21
  4. [Système] lancer / kill une application sous linux
    Par Antoine NSG dans le forum Langage
    Réponses: 1
    Dernier message: 31/10/2005, 16h06
  5. [Système][Runtime]lancer une application externe
    Par mencaglia dans le forum API standards et tierces
    Réponses: 14
    Dernier message: 22/09/2005, 17h27

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