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
exec('/path/a.out param1 param2');
Et voici mon programme C
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.
Partager