php und shell_exec

  • Ich möchte mittels php auf dem Pi eine Datei erzeugen:
    ..
    $o=shell_exec('echo \"etwas\" |tee t.0');
    echo "<pre>$o</pre>";
    ..


    ich vermute mal, dass der 'apache' selbiges verhindert :(


    any hints


    mfg sortable

  • Warum shell_exec ? Nimm PHP.

    Code
    <?PHP
    $fh=fopen("t.0","w");
    fputs($fh,"etwas");
    fclose($fh);
    ?>

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?


    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Ergänzend sei gesagt, das passiert mit dem User und dessen Rechten unter dem der Webserver läuft.

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.

  • Erstmal danke für die raschen Antworten,
    (ähm shell_exec ist im Übrigen ein php-Kommando)


    also hilft der Code vom Imperator nix weiter,


    das Problem muss mit der Rechtevergabe zu tun haben:


    <?php
    $fh=fopen("t.0","w");
    fputs($fh,"etwas");
    fclose($fh);


    $output=shell_exec('file d.0');
    echo "<pre>$output</pre>";
    ?>


    Fehlerausgabe:



    d.0: ERROR: cannot open `d.0' (No such file or directory)


    mfg Sortable

    • Official Post

    der imperator hat recht, shell_exec ist eine Schnittstelle um Systembefehle auszuführen. Wenn php das nativ kann, ohne den umweg über die bash zu gehen, ist dieser weg immer zu bevorzugen. Das zählt nicht nur für php sondern für alle Sprachen.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • das Problem muss mit der Rechtevergabe zu tun haben:


    Ja, das ist richtig.
    Du solltest dich mal schlau machen unter welchem Benutzer dein shell_exec ausgeführt wird, ob der User berechtigung hat den Befehl auszuführen und zuletzt ob der Benutzer die rechte hat in dem Verzeichnis zu lesen und zu schreiben.


    Lies dich mal in das Rechtesystem ein oder nutze PHP

    Code
    <?PHP
    $output=file("t.0");
    print_r($output);
    ?>


    [hr]
    Ich sehe grade du hast auch einen Fehler im Script.


    Du schreibst mit PHP die Datei t.0 und liest mittels exec d.0

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?


    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

    Edited once, last by Der_Imperator ().

  • Ah ich bin jetzt ein gutes stück weiter
    [code=php]
    <html><body>
    <h1>Raspberry Pi</h1>
    <p></p>


    <?php


    $output=shell_exec('date');
    echo "<pre>$output</pre>";



    $output=shell_exec('whoami');
    echo "<pre>$output</pre>";


    $output=shell_exec('echo \"Hallo\" > t.0');
    echo "<pre>$output</pre><br>";



    $output=file("t.0");
    print_r($output);




    ?>


    </body></html>
    [/php]


    ich hab vorher einfach mittels 'touch' die Datei erzeugt und 'chown' angepasst:


    Browserausgabe:
    =================================================
    Raspberry Pi


    Wed May 14 12:15:53 CEST 2014


    www-data



    Array ( [0] => "Hallo" )


    =================================================
    thx Sortable

  • Ich verstehe immer noch nicht so richtig warum du mit shell_exec schreibst.

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?


    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.


  • Ich verstehe immer noch nicht so richtig warum du mit shell_exec schreibst.


    Wie solltest Du auch, ich versuche über den Aufruf einer Seite ein aktuelles
    Diagramm via gnuplot zu erstellen, als erste Hürde hatte sich bislang diese Rechte-Geschichte
    herausgestellt.


    bis dann Sortable

  • Imperator hat völlig recht:
    Solange Du lediglich eine Datei zum Schreiben bzw. Lesen öffnen möchtest, ist fopen/fputs/fclose wesentlich effizienter anstelle von "shell_exec", wofür erst ein eigener Shell-Prozess angelegt werden muss um das externe Kommando auszuführen.


    Gruß, mmi