murraene: PHP externes Programm starten

Hi @all,

hier meine Frage:
Ich habe ein PHP Script, aus heraus ein externes (binäres) Programm gestartet werden soll.
Der Pfad des PHP Scripts /var/www/html/script.php
Das externe Programm /opt/extProg/programm

Ich könnte natürlich jetzt den absoluten Pfad angeben ala
system("/opt/extProg/programm");

wenn da nicht noch andere Dateien im Programmverzeichnis liegen würden auf die das Programm zugreifen müsste.

Gibt es eine Möglichkeit den Pfad fest in irgendwelche Umgebungsvariablen einzubauen?

Vielen Dank schon mal,
murraene

  1. Hi!

    Gibt es eine Möglichkeit den Pfad fest in irgendwelche Umgebungsvariablen einzubauen?

    Ja, PATH existiert und kann auch temporär ergänzt/geändert werden. Das ist aber nicht für Daten sondern für die ausführbare Dateien vorgesehen. Vielleicht willst du einfach nur das Arbeitsverzeichnis wechseln (cd).

    Lo!

    1. Ja, PATH existiert und kann auch temporär ergänzt/geändert werden. Das ist aber nicht für Daten sondern für die ausführbare Dateien vorgesehen.

      Ich hab das jetzt mal probiert mit
      system("PATH=/opt/extProg:$PATH");
      system("export PATH");

      Das funktioniert leider auch nicht...

      1. Hi!

        Ja, PATH existiert und kann auch temporär ergänzt/geändert werden. Das ist aber nicht für Daten sondern für die ausführbare Dateien vorgesehen.

        Ich hab das jetzt mal probiert mit
        system("PATH=/opt/extProg:$PATH");
        system("export PATH");

        Das funktioniert leider auch nicht...

        "Funktioniert nicht" funktioniert nicht als Fehlerbeschreibung. Wenn ich raten soll, siehst du in dem zweiten Systemaufruf wieder den alten PATH. Wenn du den PATH änderst, gilt das nur für die aktuelle Shell. Ein neuer Systemaufruf ergibt eine neue Shell. Mehrere Commandos lassen sich mit ; aneinander hängen. Außerdem sagte ich auch, dass der PATH nicht für Daten gilt sondern für ausführbare Programme.

        Lo!

        1. Außerdem sagte ich auch, dass der PATH nicht für Daten gilt sondern für ausführbare Programme.

          Ich rede auch nach wie vor von ausführbaren Programmen...

          "Funktioniert nicht" funktioniert nicht als Fehlerbeschreibung

          In dem Fall is ja wohl klar, dass der Pfad nicht übernommen wird, was soll denn sonst nicht funktionieren

          1. Hi!

            Außerdem sagte ich auch, dass der PATH nicht für Daten gilt sondern für ausführbare Programme.
            Ich rede auch nach wie vor von ausführbaren Programmen...

            Nun, das war mir bis eben nicht klar, denn "noch andere Dateien im Programmverzeichnis [...] auf die das Programm zugreifen müsste" kann man auch als Datendateien ansehen, auch wenn das unter Unix/Linux eher ein Designfehler ist.

            "Funktioniert nicht" funktioniert nicht als Fehlerbeschreibung
            In dem Fall is ja wohl klar, dass der Pfad nicht übernommen wird, was soll denn sonst nicht funktionieren

            Alles mögliche, ich bin kein Hellseher. Ich verlasse mich beim Programmieren nicht darauf was "klar" ist, sondern auf das was ich sehe und überprüft habe.

            Lo!

            1. Ok nochmal ganz strukturiert:

              Ich habe ein php Script in /var/www/html/

              Ich möchte auf ein Programm (hier ein perl-Script) zugreifen, das in /opt/extProg/ liegt

              Wenn ich per ssh auf den server zugreife funktioniert alles, weil das Verzeichnis in der Environment Variable PATH eingebunden ist.

              Da der apache, als der das php-Script ausgeführt wird, nicht über die Shell ausführt, "kennt" er das Verzeichnis nicht. Also muss ich es ihm irgendwie beibringen.

              Ein einfaches chdir bringt auch nichts, weil das perl-Script das ausgeführt wird auf weitere Scripte zugreifen muss, die es dann aus mir nicht erfindlichen Gründen nicht findet. Weiss der Geier warum.

              1. Hi!

                Da der apache, als der das php-Script ausgeführt wird, nicht über die Shell ausführt, "kennt" er das Verzeichnis nicht. Also muss ich es ihm irgendwie beibringen.

                Den Hinweis mit dem Trennen per ; hast du schon probiert? system(PATH setzen ; Programm aufrufen) Wenn das zu lang wird, kannst du dir ja ein Shellscript schreiben.

                Lo!