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.