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 :

passthru(): Unable to fork


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2014
    Messages : 266
    Par défaut passthru(): Unable to fork
    Bonjour,

    J'utilise un processus créé par la fonction proc_open() dans un programme "sockets serveur" démarré depuis un fichier "bat" en mode administrateur, dans le but de lancer une commande de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    php "prog.php" "param1" "param2"
    prog.php contient une fonction permettant d'exécuter un autre programme de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    passthru($commande,$statut);
    En capturant la sortie de passthru() j'obtiens ce message d'erreur :

    Warning: passthru(): Unable to fork [chcp 65001 & php "c:/.../.../autre_prog.php" "param1" "param2" ] in C:\serveur\..\...\prog.php on line 174
    Quelle est l'origine de cette erreur quelles solutions ?

    PHP 7.4.12

    Merci d'avance.

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 287
    Par défaut
    Probablement une limitation système.
    Il faudrait voir le contenu de la fonction passtrhu et surtout récupérer le code erreur de retour de fork.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2014
    Messages : 266
    Par défaut
    J'aimerais bien donner tous les détails mais c'est trop long à expliquer.
    En deux mots la commande dos qui ne s'exécute pas comprends un programme php CLI, à l'intérieur duquel je lance plusieurs fois des commandes dos et ou des programmes à l'aide de passthru(). J'essaie de suivre l'exécution en écrivant dans des fichiers et visiblement le programme en question débute bien mais s'arrête en plein milieu sans erreurs, comme si une limite était atteinte (nb process ? ou autre).
    Comment récupérer le code retour fork ?

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2014
    Messages : 266
    Par défaut
    Je pense à d'autres alternatives en utilisant le serveur web mais la fonction passthru() bloque dans ces cas là et j'obtiens le message suivant :
    "Accès refusé"
    Est il possible de contourner les problème d'accès avec passthru() ?

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 287
    Par défaut
    une limite était atteinte (nb process ? ou autre).
    C'est l'hypothèse, il te faut placer des points d’arrêts dans le code et surtout analyser le retour des fonctions pour savoir quelle est réellement l'erreur.

    Appeler un programme par un programme qui appelle un programme est une source de problèmes.
    Sans plus de détail on pourra pas t'aider plus.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2014
    Messages : 266
    Par défaut
    Merci pour ce retour.
    Bon difficile de trouver une bonne solution mais je me suis aperçu après moult tests qu'il y a quelque chose de bizzard que je n'avais pas dans la version antérieure de php (5.5x). Déjà avec proc_open() et php nous avons un problème pour lire les flux stdin/out sous windows puisque ceux-ci sont bloquants, donc ce que je faisais pour contourner ceci c'est de ne pas lire les flux et attendre un signal de fin généré en parallèle. Comme mon programme bloque je ne sais où, j'ai tenté différentes variantes pour les commandes, notamment start /B utilisation de passthru(), exec()... mais toujours le même problème. Par contre je suis parvenu à avoir partiellement la sortie d'écran du process créé par proc_open lorsque celui-ci lance un programme exe comme ffmpeg par exemple et je m'aperçois que le programme s'est donc bien lancé mais avec ce premier message d'erreur et reste "figé" :

    GnuTLS initialization: Failed to acquire random data
    J'en déduis que c'est ça qui génère des blocages (je n'avais pas du tout ce problème sous php 5.).

    Un autre essai m'a permis de constater que si je lance un processus et que je lis le flux stdout dans la foulée la commande s'exécute jusqu'à la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proc_open() + stream_get_contents()
    Et si je ne fais pas cela le programme se bloque comme décris au dessus.

    Ce qui me dérange c'est qu'en php 5 j'avais trouvé un moyen de faire des multiprocessus en parallèle sans être obligé de lire les dans les flux et là visiblement cela ne marche plus les commandes d'exécutables se figent, en tous les cas pour ceux que j'ai testés. Maintenant j'ai ce nouveau problème de fork() que je ne comprends pas non plus.

    Ca devient très compliqué (impossible) de faire des processus simultanés avec php entre les blocages, les droits d'accès, le mode cli ou module apache et le fonctions qui parfois sont boguées... C'est dommage.

    J'étudie une solution alternative utilisant des utilitaires car là je sèche vraiment.

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

Discussions similaires

  1. [Système] Problème de droits en PHP (unable to fork)
    Par jeremie74 dans le forum Langage
    Réponses: 5
    Dernier message: 27/10/2006, 11h22
  2. Executer un exe en php (Unable to fork)
    Par Alain15 dans le forum IIS
    Réponses: 13
    Dernier message: 03/08/2006, 13h15
  3. [langage] [Fork] Détecter un fichier
    Par GLDavid dans le forum Langage
    Réponses: 11
    Dernier message: 08/07/2004, 01h05
  4. unable to create INITIAL extent for segment in tablespace
    Par Ludolitaliano dans le forum Administration
    Réponses: 4
    Dernier message: 11/09/2003, 16h43
  5. Pas de fork sous Windows?
    Par chezjm dans le forum POSIX
    Réponses: 8
    Dernier message: 11/06/2002, 12h15

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