Page 1 sur 2
Fork avec exec en php
Posté : 15 juin 2006, 20:43
par Maxinfos
Bonjour,
voilà, je cherche à créer un fork sur un fichier php de la façon suivant :
Fichier lançant le fork :
<?
exec("/var/www/vhosts/httpdocs/dossier/fork.php");
?>
Fichier forké (fork.php):
<?
fopen("./file.txt", "x");
?>
C'est tout petit, j'essaye juste de créer un fichier en passant par un fork !!! Mon fichier fork.php fonctionne quand je le lance tout seul, mais PAS si je passe par l'autre via la commande exec().
J'ai vu ici :
http://www.phpfreaks.com/tutorials/71/1.php comment faire, mais ça ne fonctionne pas. Ce n'est pas un pb de droits, j'ai tout à 777 !!!
Si qqun peut m'aider ... merci ... je cherche une solution afin de mettre à jour une base de donnée d'un annuaire contenant des sites internet et je dois recalculer la notation interne (1 fois par mois) et ce lorsque l'on détecte le 1er visiteur du mois, ce qui prend beaucoup de temps à l'affichage du site pour ce visiteur "particulier" !!!
Si vous avez d'autres proposition pour rendre cette mis à jour transparent à ce 1er utilisateur mensuel !!!
A+
Posté : 16 juin 2006, 07:04
par Ultiny
En fait il faut pas executer ton fichier mais executer php avec ton fichier en argument, par exemple :
/usr/local/php/php /home/ultiny/scripts/cron.php
Posté : 16 juin 2006, 13:01
par Maxinfos
En effet, ça marche mieux ... mais QUE sous unix;
Je m'explique : j'ai 2 fichiers
test.php
test2.php
Sous unix, via le shell, si je fais
Le fichier test2.txt est bien créé
Mais si je vais sous Moz via
http://monsite/test.php, ben RIEN ne se passe !!!!!!
Pourquoi ???????

Posté : 16 juin 2006, 20:10
par Ultiny
Analysons ensemble :
- Tu est sous Linux ou Windows?
- Où se trouve ton executable PHP
Avec ces réponses tu refait pareil que pour Linux mais avec les chemins Windows et attention aux \ qu'il faut soit doubler lorsque c'est dans des quotes " ou alors mettre des / pour pas se prendre la tête.
Posté : 16 juin 2006, 23:44
par delcedo galaxialord
safe mod ?
Je pense qu'il est sous linux dans les deux cas, donc le problème vient de php qui est peut être en safe_mod, édite le php.conf et mets le safe_mod à false (ou 0 je sais plus)
Posté : 17 juin 2006, 10:26
par Maxinfos
En fait, j'ai une connexion unix en ssh sur un serveur, sur lequel j'ai juste le shell ... d'où le fait que je puisse faire
Ensuite, pour Moz ou IE, je suis sur windows ... donc mon fichier php est toujours executé sur le serveur, et non pas sur ma machine windows via easyphp par exemple ....
Est ce que les chemins changent du fait que le fichier soit executé via windows sur machine unix ????
Pour le safemod, je viens de mailer mon administrateur pour qu'il le change d'état ....
Après, j'ai tous les droits niveaux fichier et dossiers, toute façon, la commande fonctionne pour moi via le shell ... je ne vois pas pourquoi en m'aidant de vos informations ça ne fonctionnerai pas à cause d'un pb de droits d'accès ... j'essaye et je vous dit ...
Posté : 17 juin 2006, 10:50
par delcedo galaxialord
Salut !
Non en fait, ton fichier est toujours exécuté sur le serveur unix. L'utilisation de ton navigateur (role du client) permet juste de demander au serveur Unix d'exécuter la page et ce dernier redirige les informations à ton navigateur, donc peu importe quel logiciel tu utilises ou quel système d'exploitation tu as, ce qui compte c'est les caractéristiques du serveur.
Je pense donc que le problème vient bien de safe_mod qui doit être à "on", faut attendre la réponse de ton admin

Posté : 17 juin 2006, 15:23
par Maxinfos
Mon admin vient de mettre le safe_mod à OFF ...
Je viens de tester mon script ... et ça fonctionne !!!!!
Merci beaucoup delcedo galaxialord, c'est toi qui a trouvé la solution à mon problème.
Pensé aussi à Ultiny qui n'a pas tord, même si mon problème n'était pas là ...
A+
PS : pour trouver le répertoire où est installé php sous unix, placez vous à la racine, puis faites un "which php".
Posté : 17 juin 2006, 15:47
par delcedo galaxialord

pense à mettre résolu sur ton sujet

(en haut à gauche du titre du topic)
Posté : 17 juin 2006, 15:53
par Maxinfos
C'est ce que je voulais faire ... mais impossible ... c'est du au fait que j'étais Invité quand j'ai posté le message ... à mon avis, on peut mettre résolu seulement quand on est identifié et qu'on est celui qui a posté le sujet !!!!
Posté : 19 juin 2006, 08:39
par Maxinfos
Hum ... en fait, mon fork ne fait pas un vraiment fork ...
Pour preuve, si je met un sleep(10) dans le fichier forké, ben je suis obligé d'attendre les 10 secondes pour continuer à executer ma page principale.
Dans ma ligne de commande, j'ai essayé de rajouter un "&" pour lancer en tant que processus, mais ça n'a rien fait ...
Je suis retourné sous unix, pour essayer la commande, et pareil, le fichier n'est pas lancé en tant que processus, il s'execute et se termine au bout de 10 seconde sans rendre la main .. j'ai essayé avec d'autres programmes comme vi, et là ça fonctionne ... peut être à cause des erreurs qui s'affichent à l'execution du fichier php, mais qui n'affectent cependant pas son execution ....
Cannot find module (IP-MIB): At line 0 in (none)
Cannot find module (IF-MIB): At line 0 in (none)
Cannot find module (TCP-MIB): At line 0 in (none)
Cannot find module (UDP-MIB): At line 0 in (none)
Cannot find module (HOST-RESOURCES-MIB): At line 0 in (none)
Cannot find module (SNMPv2-MIB): At line 0 in (none)
Cannot find module (SNMPv2-SMI): At line 0 in (none)
Cannot find module (NOTIFICATION-LOG-MIB): At line 0 in (none)
Cannot find module (UCD-SNMP-MIB): At line 0 in (none)
Cannot find module (UCD-DEMO-MIB): At line 0 in (none)
Cannot find module (SNMP-TARGET-MIB): At line 0 in (none)
Cannot find module (NET-SNMP-AGENT-MIB): At line 0 in (none)
Cannot find module (HOST-RESOURCES-TYPES): At line 0 in (none)
Cannot find module (LM-SENSORS-MIB): At line 0 in (none)
Cannot find module (UCD-DISKIO-MIB): At line 0 in (none)
Cannot find module (IPV6-ICMP-MIB): At line 0 in (none)
Cannot find module (IPV6-MIB): At line 0 in (none)
Cannot find module (IPV6-TCP-MIB): At line 0 in (none)
Cannot find module (IPV6-UDP-MIB): At line 0 in (none)
Cannot find module (SNMP-VIEW-BASED-ACM-MIB): At line 0 in (none)
Cannot find module (SNMP-COMMUNITY-MIB): At line 0 in (none)
Cannot find module (NET-SNMP-EXTEND-MIB): At line 0 in (none)
Cannot find module (UCD-DLMOD-MIB): At line 0 in (none)
Cannot find module (SNMP-FRAMEWORK-MIB): At line 0 in (none)
Cannot find module (SNMP-MPD-MIB): At line 0 in (none)
Cannot find module (SNMP-USER-BASED-SM-MIB): At line 0 in (none)
Cannot find module (SNMP-NOTIFICATION-MIB): At line 0 in (none)
Cannot find module (SNMPv2-TM): At line 0 in (none)
Que puis je faire ?

Posté : 19 juin 2006, 08:50
par Ripat
Si j'ai bien tout suivi, tu cherches simplement à faire tourner un script en arrière-plan pour qu'un utilisateur ne doive pas attendre la fin d'un traitement pour continuer à naviguer.
C'est bien ça?
Posté : 19 juin 2006, 08:55
par Maxinfos
OUI, c'est exactement ça !!!!!!!!!
Posté : 19 juin 2006, 08:58
par Ripat
Dans ce cas, une petite recherche avec "tâche de fond" ou "background" comme mot clé sur notre forum t'aurait révélé ceci:
http://www.phpfrance.com/forums/voir_re ... .php#90972

Posté : 19 juin 2006, 09:32
par Maxinfos
Décidément, j'ai vraiment du mal à "forker" ce fichier php ...
En localhost, sur easyphp :
0.php qui lance le fichier testfork.php
<?php
$fichier='testfork.php';
$host = 'localhost';
// ouverture des sockets (un par tâche à exécuter)
echo "Script <b>$fichier</b> tourne en tâche de fond<br />";
$fp = fsockopen($host, 80, $errno, $errstr, 10);
$header = "GET $fichier HTTP /1.1\r\n";
$header .= "User-Agent: monScriptPHP\r\n";
$header .= "Connection: Close\r\n\r\n";
fputs($fp, $header);
fclose($fp);
?>
testfork.php
<?php
// script enfant (p. exple: script_1.php) = = = = = = = =
ignore_user_abort(true);
fopen("titi.txt", "x");
?>
Si j'execute mon fichier 0.php, j'ai le echo sur la page mais aucun fichier titi.txt créé.
Si j'execute testfork.php, mon fichier titi.txt est créé.
Emplacement des 2 fichiers : F:\Program Files\EasyPHP1-8\www\____FORK
Si qqun voit le problème ...