phpbar.de logo

Mailinglisten-Archive

[PHP] exec() sytem() startet nicht jedes Programm - Warum?

[PHP] exec() sytem() startet nicht jedes Programm - Warum?

flim php_(at)_phpcenter.de
Wed, 22 May 2002 10:48:56 +0200


Huhu,

On Wednesday 22 May 2002 02:26, Alexander Saupe wrote:

> DAS EIGENTLICHE PROBLEM IST DIESES:
> Wenn ich doch erstmal den bloeden mlDonkey über PHP starten könnte....
> das geht nicht, kann ihn nicht starten. Habs damit versucht:
> exec ("mldonkey > mldonkey.log &");

Ich habe für diese Problem auch noch keine gute Lösung gefunden. Das einzige, 
was in ähnlichen zusammenhängen funktioniert hat, ist einen kleinen "daemon" 
in c zu schreiben, den aufzurufen und ihm als parameter den Aufruf mit zu 
übergeben. Soweit ich das verstehe, wird alles, was du von php aus startest, 
beendet, sobald das script beendet wird (...). Machen wirs einfach und sagen, 
das der daemon sich von der shell lösen kann, indem er stdin(...) schließt 
und neu öffnet und so fort. Gibt dazu schon einige Beispiele auf den php 
seiten; find ich jetzt nicht, aber so ähnlich könnte das aussehen:

#include <stdio.h>
#include <sys/signal.h>

int main(int argc, char *argv[])
{
  char cmd[200];
  char debug=0;		//true || false.
  sigset(SIGINT, SIG_IGN);
  sigset(SIGPOLL, SIG_IGN);
  sigset(SIGHUP, SIG_IGN);
  sigset(SIGCLD, SIG_IGN);
  if(fork())exit(0);
  setpgrp();
  close (fileno(stdin));
  close (fileno(stdout));
  close (fileno(stderr));
  open ("/");
  dup2 (0,1);
  system (argv[1]);
}

Eine andere Lösung wäre, einen kleinen Daemon in php zu schreiben, den Du im 
Hintergrund laufen läßt. Dann schreibst du kleine messages irgendwo ins 
system, die der daemon liest. Der daemon führt die sachen dann im Vordergrund 
aus...Auf die Weise läuft das webscript einfach weiter. Ist etwas viel source 
um das hier zu veröffentlichen...und vielleicht weiss ja auch jemand eine 
leichtere Lösung. Aber wenn's wer braucht, schick ichs gern rum.

Gruß,
flim


php::bar PHP Wiki   -   Listenarchive