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 :

Lancement d'un programme C avec fork


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 19
    Points : 11
    Points
    11
    Par défaut Lancement d'un programme C avec fork
    Bonjour,

    je travail sur un projet qui a besoin de convertir des documents pdf ou autre en image. un script shell est exécuté via php.

    Je voudrais rendre cette conversion asynchrome, pour cela j'ai fais un programme C

    Dans mon PHP je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec('/path/a.out param1 param2');
    Et voici mon programme C

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    /* Includes */
    #include <unistd.h>    
    #include <sys/types.h>  
    #include <errno.h>     
    #include <stdio.h>     
    #include <sys/wait.h>   
    #include <stdlib.h>     
    #include <string.h> 
     
    int main(int argc, char** argv)
    {
    	// declaration des variables
        char *script = argv[1];
        char *tmpdir = argv[2];
        char path[1000] = "cd " ;   
        pid_t childpid; 
     
     
        strcat(path,tmpdir);
     
    	// on fork
        childpid = fork();
     
        // on teste la fork
      	if(childpid >= 0){
      		// si c'est l'enfant on execute le script
            if (childpid == 0){
                FILE* fichier = NULL;
        		fichier = fopen("/home/name/test.log", "w");
    			if (fichier != NULL){
    				fprintf(fichier,"path : %s\ncommande : %s\n",path,script);
    				// on change de repertoire
    		    	chdir(path);
    		    	// on execute le script
    		        system(script);
    		 		fputs("fin\n",fichier);
    				fclose(fichier);
    			}
     
            }else{
            	FILE* fichier = NULL;
        		fichier = fopen("/home/name/testpapa.log", "w");
    			if (fichier != NULL){
    		 		fputs("papa\n",fichier);
    				fclose(fichier);
    			}
            }
        }else{
        	printf("erreur de fork");
        	exit(0);
      	}
    }
    Mon probleme est que ce code fonctionne bien en normal, par exemple si je met la commande 'touch test.txt' dans le premier parametre et '/home/name/' dans le seucond, il me crée bien le fichier test.txt ainsi que les fichiers log.

    En revanche ca ne marche pas quand je le lance depuis php, meme le fichier testpapa.log n'est pas créé.

    Est ce un problème de droit ? ou d'execution ?

    Merci.

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    probablement un probleme de droits d'abord et de chemin ensuite ou les deux/
    le plus simple c'est lancer un petit

    avec ton php et quand ça marche tu utilises ton programme externe.

    pour ton fork je pense qu'il n'y a aucune importance, par contre je me suis souvent demandé si on peut détacher le programme avec un & dans exec.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    je le met où le echo toto>>log ?
    C'est quoi toto ?

    Le problème c'est que mon programme C ne ce lance même pas, dedans j'écris le pid dans un fichier txt et ce fichier n'est même pas créé

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Et non on peux pas détaché, j'ai testé : exec('convert truc ... &') et ca marche pas, la commande exec attend la fin.

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    utilise pdf2png

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Ca n'ira pas, il y a deja des fonctions pour la convertion, on convertit meme les doc, et les video dans certains formats.

    Mais en fait ca doit etre impossible ce que je veux faire, il faudrait plutot que je fasse un thread en php. Je vais passer par ajax sinon.

Discussions similaires

  1. Lancement d'un programme java avec delphi
    Par isaac1986 dans le forum Langage
    Réponses: 1
    Dernier message: 31/03/2011, 11h50
  2. Problème lancement d'un programme en Delphi avec Java
    Par Arakasi dans le forum Général Java
    Réponses: 7
    Dernier message: 18/01/2011, 14h44
  3. Lancement programme UNIX avec commandes claviers incluses
    Par cosaque31 dans le forum Shell et commandes POSIX
    Réponses: 2
    Dernier message: 11/01/2011, 12h26
  4. Réponses: 8
    Dernier message: 06/10/2010, 11h45
  5. Lancement d'un programme avec la fonction "at"
    Par Coori dans le forum Administration système
    Réponses: 2
    Dernier message: 16/05/2006, 15h02

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