THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline

#1 exec script.php

(28-09-2013 08:40:06)


Bonjour à tous!

J'essaye désespérément de lancer un script.php depuis un fichier.php pour qu'il tourne en tâche de fond mais en vain.

parent.php

echo exec('whoami');
$path=realpath(dirname(__FILE__))."/index.php";
exec('/usr/bin/php5 '.$path.' > /dev/null &');

enfant.php

<?php
$path=realpath(dirname(__FILE__))."/index.php";
$fp = fopen($path.'/data.txt','w');
for($i=0;$i<10;$i++){
	fwrite($fp,$i."\n");
}
fclose($fp);
?>

Le premier exec fonctionne mais le deuxième celui qui lance le parent.php (j'obtiens un processus qui ne meurt jamais)
Par contre, si je lance depuis le shell du serveur, tout fonctionne...

Les droits sont en 777 sur index.php et le user est bien le même...
(J'ai vérifié avec posix_getpwuid() et posix_getuid();

Une idée?

Merci d'avance! smile


Aide les autres, ils t'aideront en retour.

Offline

#2 Re: exec script.php

(28-09-2013 09:10:30)


Il y a une raison pour laquelle tu n'utilises pas le cron ?

Redirige strderr et stdout dans un fichier plutôt que sur /dev/null, tu verra les éventuels message d'erreur.

exec('/usr/bin/php5 '.$path.' > /tmp/log 2>&1 &');

OpenStudio Toulouse

Offline

#3 Re: exec script.php

(28-09-2013 12:05:03)


roadster31 wrote:

Il y a une raison pour laquelle tu n'utilises pas le cron ?

Je n'utilise pas de cron car en fait c'est lors d'un upload de gros fichiers (csv, 6 à 20Mo / près de 200 000 lignes) qui doit être traité et donc j'avais un joli gateway timeout au bout d'un moment... Mais le php continuait à s'exécutait derrière.
Donc je suis parti sur cette solution pour que l'utilisateur garde la main sur l'interface.

roadster31 wrote:

Redirige strderr et stdout dans un fichier plutôt que sur /dev/null, tu verra les éventuels message d'erreur.

exec('/usr/bin/php5 '.$path.' > /tmp/log 2>&1 &');

Je l'avais enlevé car en fait ça n'apportait pas grand chose au pourquoi du comment car il était vide...
Mais je viens de le remettre et il se passe des choses bizarres...

J'avais fait une faute de frappe est mis ça

exec('/usr/bin/php5 '.$path.' > '.$path.'log.txt 2>&1 &');

et j'obtenais ça :

index.phplog.txt wrote:

X-Powered-By: PHP/5.2.17
Content-type: text/html

<br />
<b>Warning</b>:  exec() [<a href='function.exec'>funsh: fork: retry: Resource temporarily unavailable
sh: fork: retry: Resource temporarily unavailable
sh: fork: retry: Resource temporarily unavailable
sh: fork: retry: Resource temporarily unavailable
sh: fork: retry: Resource temporarily unavailable
sh: fork: retry: Resoursh: fork: retry: Resource temporarily unavailable
ce temporarily unavailable
sh: fork: retry: Resource temporarily unavailable
emporarily unavailable
sh: fork: retry: Resource tsh: fork: retry: Resource temporarily unavailable
emporarily unavailable
sh: sh: fork: retry: Resource temporarily unavailable
emporarily unavailable
emporarily unavailable
sh: fork: retry: Resource temporarily unavailable
sh: fork: retry: Resource tsh: fork: retry: Resource temporarily unavailable
sh: fork: retry: Resource temporarily unavailable

En boucle et donc quand je supprime parent.php (pour arrêter la boucle infinie), j'obtiens donc ça :

index.phplog.txt wrote:

Status: 404 Not Found
X-Powered-By: PHP/5.2.17
Content-type: text/html

No input file specified.

Normal...

Par contre, si je mets ce code

$path=realpath(dirname(__FILE__));
exec('/usr/bin/php5 '.$path.'/index.php > '.$path.'/log.txt 2>&1 &');

log.txt reste vide jusqu'à ce que je supprime parent.php pour afficher la même chose qu'au dessus...


Aide les autres, ils t'aideront en retour.

Offline

#4 Re: exec script.php

(28-09-2013 12:26:16)


Après, si ça veut vraiment pas (et je comprends vraiment pas pourquoi!!!), je passerai par de l'Ajax...

Formulaire > upload > sauvegarde du fichier > lancement du script de traitement en Ajax sans callback


Aide les autres, ils t'aideront en retour.

Offline

#5 Re: exec script.php

(29-09-2013 17:18:01)


Même souci en Ajax...
Impossible de libérer la navigation...


Aide les autres, ils t'aideront en retour.

Offline

#6 Re: exec script.php

(29-09-2013 19:44:34)


3ème essai : fsockopen
ça semble fonctionner... reste à tester avec le gros script.


Aide les autres, ils t'aideront en retour.

Offline

#7 Re: exec script.php

(30-09-2013 00:02:28)


Je piétine...
ça ne me libère pas la navigation... ça raaaaaaaaame!


Aide les autres, ils t'aideront en retour.