PHP mit PI

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo Forum,

    ich würde gerne eine PHP Seite machen die meinen Scanner steuert.
    Zum Pi er ist nur an wenn er Scannt also ist das mit den Rechten kein Thema. deswegen hat auch www-daten root recht eingeräumt bekommen.
    Mein ziel ist das ich den namen der Scanndatei vorgeben kann. und dann auch so abgelegt wird. das Formular ist ja kein Problem aber wie kann ich Vareabelen in den exec übergeben?
    Endziel ist das ich einen Punkt habe wo ich eine Seite einscanne und einen wo ich so viele Seiten einscannen kann wie ich will und das dann entsprechend beenden kann.
    Aber erstmal das erste. [code=php]<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Scannen der Dokumente</title>
    <meta name="author" content="sam">
    <meta name="editor" content="html-editor phase 5">
    </head>
    <body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">

    <?php
    // Scannen anstossen BOUTEN
    if(isset($_POST['scan'])) {
    $new = $_POST['scan'];
    if($new=='0' || $new=='1')
    exec("sudo /home/pi/test/./scanbl.sh 40");
    }
    ?>


    <p>Scannen Starten
    <p><form action='scan1.php' method='post'>
    <input id="vorname" name="vorname" maxlength="100">
    <label for="name">Name</label>
    <input type='hidden' name='scan' value='1'>
    <input type='submit' value='Scan Starten'>
    </form>


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


    Und wenn es eine Wirklich gute Beschreibung zu den Thema gibt nehme ich die auch in den Buch "Rasperry PI das umfassende Handbuch" ist das nur angerissen.


    Ich bedanke mich

    euer Sam 007

  • Hallo Danke für die schnelle Rückmeldung.

    das habe ich gesehen. auch nicht ganz die sache dich ich Brauche
    möchte die 40 aus dem Term exec("sudo /home/pi/test/./scanbl.sh 40"); durch eine Variable ersetzen die ich später aus einen Formular füttern möchte.

    Wie schaut die syntax aus ?

  • Du übergibst ja im Formular auch das Feld "name". Das würde dann in etwa so aussehen:

    PHP
    <?php
    // Scannen anstossen BOUTEN
    if(isset($_POST['scan'])) {
     $new = $_POST['scan'];
     $namensfeld = $_POST['name'];
     if($new=='0' || $new=='1')
       exec("sudo /home/pi/test/scanbl.sh ".$namensfeld);
    }
    ?>

    Anfragen ausserhalb des Forums (Mail o.ä.) werden ignoriert!

  • Hallo,

    Supi das brauchte :)

    habe das ausprobiert und bin zu dem Ergebnis gekommen:


    Gehe in die Falle :(

    Einmal editiert, zuletzt von sam007 (8. Februar 2017 um 22:50)

  • Ok da habe ich den Fehler gefunden hatte die Datei in scanb1.php umbenannt.

    Das script geht wieder jetzt werde ich mal in der oben angegebenen stelle nach etwas suchen das mit auf der Webseite eine Ausgabe macht wenn der Prozess am laufen ist also die eigentliche Bash ausgabe :(

  • Dazu findest du im ersten Link aus Beitrag#2 etwas, relativ am Ende bezüglich "Error Handling"... Da drunter steht auch noch was bezüglich "popen();"

    FAQ => Nützliche Links / Linksammlung => Befehle über PHP mit root Rechten ausführen (sudo webscript)

  • Hallo

    mit popen() komme ich soweit nicht klar das Beispiel schaue ich mir die tage mal an Danke an dieser Stelle.
    Scannen geht jetzt mit vorher eingegebenen namen und Ohne wenn ich keinen Namen eingebe wird datum und Uhrzeit eingetragen.


    [code=php]

    <p>Scannen Starten

    <p><form action='scan1.php' method='post'>

    <input id="name" name="name" maxlength="15">

    <label for="name">Name</label>

    <input type='hidden' name='scan' value='1'>

    <input type='submit' value='Scan Starten'>

    </form>


    <?php

    //Ausgabe aller Post auf den echo

    echo "<pre>"; var_dump($_POST); echo "</pre>";


    // Scannen anstossen BOUTEN

    if(isset($_POST['scan']) AND !empty($_POST['name'])) {

    $new = $_POST['scan'];

    $namensfeld = $_POST['name'];

    if($new=='0' || $new=='1')

    exec("sudo /home/pi/test/scanb1.sh ".$namensfeld);


    }

    if (isset($_POST['scan'])AND empty($_POST['name'])) {

    $new = $_POST['scan'];

    $DATEI = date('dmYHi');

    // $namensfeld = $_POST['name'];

    if($new=='0' || $new=='1')

    exec("sudo /home/pi/test/scanb1.sh ".$DATEI);

    }


    echo "<pre>"; var_dump ($DATE); echo "</pre>";


    ?>


    [/php]

    was ich mit echo "<pre>"; var_dump ($DATE); echo "</pre>"; erreichen wollte ist recht einfach wollte den benutzten Dateinamen eintragen der genommen wurde. aber da mommt immer NULL raus naja muss ich nochmal forschen:) weiter gekommen bin ich ja langsam aber sicher :)

    Danke

  • Hallo Forum Gemeinde,

    wie oben angesprochen der Komplette QUODE:

    [code=php]<html>
    <head>
    <title>Scannen der Dokumente</title>
    <meta name="author" content="sam">
    <meta name="editor" content="html-editor phase 5">
    </head>
    <body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">

    <p>Scannen Starten

    <p><form action='scan_All.php' method='post'>
    <input id="name" name="name" maxlength="15">
    <label for="name">Name</label>
    <input type='hidden' name='scan' value='1'>
    <input type='submit' value='Scan Starten'>
    </form>
    <?php
    // Scannen anstossen BOUTEN

    if(isset($_POST['scan']) AND !empty($_POST['name'])) {

    $new = $_POST['scan'];

    $namensfeld = $_POST['name'];

    if($new=='0' || $new=='1')

    exec("sudo /home/pi/test/scanb1.sh ".$namensfeld ,$output, $return_var);


    }

    if (isset($_POST['scan'])AND empty($_POST['name'])) {

    $new = $_POST['scan'];

    $DATEI = date('dmYHi');

    // $namensfeld = $_POST['name'];

    if($new=='0' || $new=='1')

    exec("sudo /home/pi/test/scanb1.sh ".$DATEI ,$output, $return_var);

    }
    switch ($return_var)
    {
    case "0":
    $STATUS = "Successful";
    break;

    case "1":
    $STATUS = "General Error";
    break;

    case "2":
    $STATUS = "Incorrect Usage";
    break;

    default:
    $STATUS = $return_var;
    }
    echo "Name: $namensfeld $DATEI ruekgabe: $STATUS";

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


    Was ich gerne tuhen möchte ist auf die *sh verzichten und dei Befehle direckt an per PHP weiterleiten.
    Wenn ich das tuhe und
    exec("sudo /home/pi/test/scanb1.sh ".$namensfeld ,$output, $return_var);
    gegen diese tausche
    exec(" scanimage --format tiff --mode gray --depth 1 --resolution 150 -x 215mm -y 280mm -p > 222.tiff " ,$output, $return_var);

    bekomme ich den Fehler Incorrect Usage

    mein zweck das alles in PHP zu machen ist das ich später mehrere Seiten enscannen möchte und diese dann auch zusammenführen möchte. gewünschter Ablauf

    Name eingeben>scannen mehrere seiten auswählen(Bouten)>scannen starten>meldung Scannen vertig neue Seite > Scannen starten .... > Scannen ende Bouten drücken> Seiten alle zusammenführen und reste löschen >meldung vorgang beendet.

    Das ist mein endwunsch habe den weg dazu schon eingeschlagen aber wenn ich über die sh gehe wüsse ich nicht wie ich da rausspringe und wieder reinspringe oder muss ich dann merere sh erstellen die mit werten füttern und das so machen ?

    Danke erstmal an euch :danke_ATDE:


    P:S:
    was ich nicht verstehe wenn ich den Befehl in eine SH packe und dan ausführe geht das wenn ich die direct reinschreibe geht das nicht bekomme ich die oben genannte Meldung :((

    Einmal editiert, zuletzt von sam007 (10. Februar 2017 um 17:10)

  • Und eine Sache wollte ich. Wenn ich scanne ist das Fenster am Arbeiten Sanduhr in der Zeit bekomme ich keine Änderungen im HTML teil hin der Postet die Sachen nicht (habe ich getestet)

    Ist es möglich eine Ausgabe während eines aktiven PHP Befehls ?
    Oder muss es anders angehen?

    Gesendet von meinem SM-T560 mit Tapatalk

  • Hallo

    Die meine _exec(); funktion die Oben genannt wurde habe ich so nicht gefunden in den Beiträgen.
    Was ich will ist auch vom sinn herr recht einfach.
    in den Quode gibt es 2 Stellen innerhalb des PHP wo ein ECHO auf die Webseite ist.
    Meine frage selbst wenn der da in der IF drin ist was sicher ist macht er keinen echo auf die Webseite
    [code=php] if ($return_var=='0'){

    echo "OK ITS RUM";


    $i = 1;

    while ($i <= 3)

    {

    $namensfeldZ = $namensfeld . $i ;

    exec("sudo /home/pi/test/scanb1.sh ".$namensfeldZ ,$output, $return_var);

    echo "<br>";

    $seconds = "10" ;

    echo "<br>$namensfeldZ";

    sleep ( 10);

    $i++; // Wert wird um 1 erhöht
    }[/php]

    Bei dem Auszug geht es mir darum das er wenn er in die IF reingeht eine Meldung auf die Webseite gibt damit der Anwender sehen kann das er mehrere Seiten scannen kann. (Das ich hinterher einen Bouten drin haben will für nächsten scan und ende ist klar aber noch nicht drin eines nach dem anderen.
    Wie bekomme ich dieses hin das er innerhalb des PHP auf HTML reagiert b.z.w. ausgaben macht ?

    Sollte doch gehen.
    Wenn das nicht geht muss ich mir eine andere Lösung suchen :(

    Kompletter Quode falls gewünscht [code=php]<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

    <html>
    <head>
    <title>Scannen der Dokumente</title>
    <meta name="author" content="sam">
    <meta name="editor" content="html-editor phase 5">
    </head>
    <body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">


    <p>Scannen Starten

    <p><form action='scan_All.php' method='post'>
    <input id="name" name="name" maxlength="15">
    <label for="name">Name</label>
    <input type='hidden' name='scan' value='1'>
    <input type='submit' value='Scan Starten'>
    </form>

    <?php
    // Scannen anstossen BOUTEN
    $down = $_POST['down'];

    if(isset($_POST['scan']) AND !empty($_POST['name'])) {

    $new = $_POST['scan'];


    $namensfeld = $_POST['name'];

    if($new=='0' || $new=='1')

    //exec(" scanimage --format tiff --mode gray --depth 1 --resolution 150 -x 215mm -y 280mm -p > 222.tiff " ,$output, $return_var);
    //$outputA = shell_exec('sudo scanimage --format tiff --mode gray --depth 1 --resolution 150 -x 215mm -y 280mm -p > 222.tiff');
    // echo "<pre>"$outputA"</pre>" ;
    exec("sudo /home/pi/test/scanb1.sh ".$namensfeld ,$output, $return_var);

    // wenn das erste scannen ok war dann in die schleife rein
    if ($return_var=='0'){
    echo "OK ITS RUM";

    $i = 1;
    while ($i <= 3)
    {
    $namensfeldZ = $namensfeld . $i ;
    exec("sudo /home/pi/test/scanb1.sh ".$namensfeldZ ,$output, $return_var);
    echo "<br>";
    $seconds = "10" ;
    echo "<br>$namensfeldZ";
    sleep ( 10);
    $i++; // Wert wird um 1 erhöht
    }


    }
    else
    {
    echo "schitt";
    }

    }

    if (isset($_POST['scan'])AND empty($_POST['name'])) {

    $new = $_POST['scan'];


    $hinter = " &";
    $DATEI = date('dmYHi');

    // $namensfeld = $_POST['name'];

    if($new=='0' || $new=='1')

    exec("sudo /home/pi/test/scanb1.sh ".$DATEI ,$output, $return_var);

    }
    switch ($return_var)
    {
    case "0":
    $STATUS = "Successful";
    break;

    case "1":
    $STATUS = "General Error";
    break;

    case "2":
    $STATUS = "Incorrect Usage";
    break;

    default:
    $STATUS = $return_var;
    }
    echo "Name: $namensfeld $DATEI ruekgabe: $STATUS";

    if($down=='0' || $down=='1')
    {
    exec ("sudo /home/pi/test/halt.sh") ;
    echo "testfff";
    }

    ?>
    <p><form action='scan_All.php' method='post'>
    <input type='hidden' name='down' value='1'>
    <input type='submit' value='Herunterfahren'>
    </form>

    <br>


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

    Einmal editiert, zuletzt von sam007 (11. Februar 2017 um 14:49)


  • Habe das so gemacht wie ich das oben beschrieben habe....
    Was meint du mit meine ex

    FAQ => Nützliche Links / Linksammlung => Befehle über PHP mit root Rechten ausführen (sudo webscript)

    In dem Beitrag findest du am Ende eine von mir entwickelte Funktion für popen(); und die nennt sich _exec(); ... Hast du die schon ausprobiert?

  • Hallo

    bin jetzt ein stück weiter tut so weit etwas. eine frage habe ich aber noch
    bei der Zeile
    exec ("sudo pdfsam-console -d ./$VERZ -o ./zusammee.pdf concat");

    würde ich gerne das ./zusammee.pdf durch eine Variable ersetzten aber das will nicht muss ich den string vorher zusammensetzten?

    danke

  • [code=php]
    $pdf_file = "zusammee.pdf";
    exec ("sudo pdfsam-console -d ./$VERZ -o ./". $pdf_file ." concat");
    [/php]

    Das sollte funktionieren, oder?


    Habe ewig kein PHP mehr coden müssen... ;)

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

  • Hallo

    Danke erstmal.
    Ja das geht bringt mich aber so nicht weiter denn ich will den Dateinamen anpassen und da will es nicht so wie ich es wll.....
    Habe schon versucht $pdf_file = $file .".pdf" ;
    Das will aber auch nicht....

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!