kostenloser Webspace werbefrei: lima-city


PHP exec funktioniert nicht

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    otisoft

    otisoft hat kostenlosen Webspace.

    Hallo,
    ich habe ein Problem: ich möchte aus einem PHP-Skript eine ausführbares Programm nur starten (!) und nicht darauf warten, dass es fertig wird / sich beendet. Dazu hatte ich den folgenden Code:

    <?php
    exec(sprintf("%s > %s 2>&1 & echo $! >> %s", './executable', 'outputfile.txt', 'pidfile.txt'));
    ?>


    Die beiden Dateien outputfile.txt und pidfile.txt werden angelegt und mit Inhalt gefüllt. Die Datei outputfile.txt hat den Inhalt:

    sh: ./executable: Permission denied


    Somit wird das Executable nicht gestartet. Dieser Fehler ist mir unerklärlich, da das gesamte Verzeichnis und die Dateien einzeln, per chmod auf 777 gesetzt wurden (zum Test), damit es garantiert funktioniert (wie ich dachte), tut es aber nicht.

    Ich würde mich über eine Lösung wirklich freuen.

    otisoft
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. g****e

    Die Funktion exec ist auf sehr vielen Hosts, wie auch hier, verboten. Du hast einfach nicht die Rechte diese Funktion auszuführen.
    Das hast du aber auf kaum einem Host, und erst recht auf keinem Freehost. Um ein externes Programm auszuführen wirst du wohl auch einen eigenen Server anmieten müssen, oder eine andere Lösung finden müssen.

    Liebe Grüße
  4. Das gepostete Skript funktioniert bei mir fehlerfrei.

    Wenn ich "exec" in der php.ini bei disable_functions eintrage, dann kommt dieser Fehler:
    Warning: exec() has been disabled for security reasons
    Auch bei Lima-City kommt genau diese Fehlermeldung. Dies ist aber bei dir offensichtlich nicht das Problem.

    Jetzt beginnen die Spekulationen ...

    Informationen über die Umgebung sind da mal angebracht. Also hast du den Server bei dir privat aufgesetzt oder hostest du die Seite irgendwo / wenn ja, wo?

    Dann könntest du noch zwei Dinge versuchen:

    1. Kannst du ein anderes Programm (z.B. "ls") ausführen?
    <?php
    exec(sprintf("ls -l > %s 2>&1 & echo $! >> %s", 'outputfile.txt', 'pidfile.txt'));
    ?>
    Sollte das klappen, schau die Ausgabe noch einmal genau an oder zeige sie uns. Denn dass mit den Dateirechten etwas nicht stimmt, ist sehr naheliegend, auch wenn du versicherst, sie auf 777 gesetzt zu haben.

    2. Hast du Zugriff auf eine Shell, dann versuch mal, diesen Shellbefehl direkt auszuführen. Also:
    ./executable > outputfile.txt 2>&1 & echo $! >> pidfile.txt


    Vielleicht kommen wir mit diesen Ergebnissen dem Fehler näher.
  5. Hosted by lima-city of course!
    Quelle: Signatur des TE's
    Würde natürlich die Fehlermeldung erklären.
  6. Autor dieses Themas

    otisoft

    otisoft hat kostenlosen Webspace.

    autobert schrieb:
    Hosted by lima-city of course!
    Quelle: Signatur des TE's
    Würde natürlich die Fehlermeldung erklären.


    Nein, ich habe das Angesprochene nicht hier gehosted. Auf dem Server, auf dem es gehosted ist, ist exec erlaubt!


    ----


    Es funktioniert jetzt das Programm zu starten, aber das Programm hat trotz 3fach überprüften Rechten angeblich keine Rechte eine Datei in dieses Verzeichnis zu schreiben. Auf der Konsole funktioniert es, über den Browser nicht.

    Beitrag zuletzt geändert: 16.7.2016 15:17:35 von otisoft
  7. Und du führst das Script über die Konsole mit dem selben Nutzer aus unter dem auch der Webserver rennt?
  8. Autor dieses Themas

    otisoft

    otisoft hat kostenlosen Webspace.

    Nein, der User auf der Konsole ist mein User und der im PHP ist "apache". Allerdings funktioniert das Ändern mit "chown" auf rätselhafte Weise einfach nicht. Es wird zwar "Eigentümer geändert" zurückgegeben, es passiert aber nichts!
  9. g****e

    Um zu prüfen, ob der apache Nutzer die Rechte hat kannst du einfach mal
    runuser -l apache -c "./executable"
    eingeben. Falls des runuser nicht existiert kannst du auch
    su - apache -c "./executable"
    benutzen.
    Dann weißt du, ob es an den Userberechtigungen liegt.

    Was macht denn dein executable? Vielleicht macht das ja auch etwas, wo die Rechte für fehlen, und das ist der einzige Output wegen einem Crash?
  10. Autor dieses Themas

    otisoft

    otisoft hat kostenlosen Webspace.

    Runuser existiert, gibt aber zurück "runuser: cannot set groups".
    Das Executable soll eine Datei von einem anderen Server herunterladen, diese entpacken und in Stücke teilen. Der Fehler tritt beim Zwischenspiechern des Downloads auf.
  11. michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    Hi,

    Mit diesem Anliegen solltest du lieber in ein Linux-Forum gehen wie debianforum.de, da kann und wird dir auf dem schnellsten Wege geholfen.

    Den Eigentümer der Datei zu ändern reicht nicht aus. Der Ordner muss ebenfals für den Apache-User sichtbar sein. Sprich "chown" für den kompletten Ordnerpfad bzw. "chmod 755" Damit jeder auf den Ordnerpfad lesen kann.

    Wenn dein Script nun etwas zwischenspeichert, dann brauch Apache auch Schreibrechte im Ordner.
    Wenn du den Ordnerpfad per "chown" an Apache gegeben hast, dann kann er auch schreiben, wenn nicht kannst du das mit "chmod 777" ändern.

    Wenn das nicht helfen sollte, dann brauchen wir hier einfach mal ein paar mehr Informationen über dein Linux-System und Installation.

    MFG Micha
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!