none
Mehr Befehle bei Powershell über PHP aufrufen RRS feed

  • Frage

  • Hallo,

     

    ich habe folgendes Problem.

    Ich möchte über ein PHP Script Werte auf einem Kundendisplay ausgeben.

     

    Wenn ich es direkt über die Powershell mache, klappt es folgendermaßen.

    $port=new-Object System.IO.Ports.SerialPort COM6,9600,None,8,one
    
    $port.open()
    
    $port.Write("   Text")
    
    $port.Close()
    


    Aber so kann ich es ja nicht über PHP aufrufen.

    Gibts da eine andere Möglichkeit?

     

    Gruß

    Donnerstag, 4. August 2011 06:05

Antworten

  • Moin,

    ok, dann ist es klar.

    Ich finde es faszinierend, welche ungewöhnlichen Wege die Leute manchmal beschreiten, um ein Problem zu lösen, dass doch eigentlich offensichtliche nicht ausprobieren.

    Natürlich kann PHP auch nativ, also ohne irgendein Zusatzprogramm, auf serielle Schnittstellen zugreifen, das macht fopen:
    fopen ("COM1:", "w+");

    Schau mal hier:
    http://php.net/manual/en/function.fopen.php

    Der Eintrag ganz am Ende vom 22.04.2002 (2002!!!) beschreibt gleich zwei Varianten, auf die serielle Schnittstelle zu schreiben.

    Hier findest Du auch noch eine Lösung, die in die Richtung geht (dritte Anwort von Giorgos Pap):
    http://stackoverflow.com/questions/627965/serial-comm-with-php-on-windows


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    Donnerstag, 4. August 2011 08:45

Alle Antworten

  • Moin,

    bevor wir jetzt hier unheimlich viel schreiben, was genau willst Du den als Ergebnis haben? Willst Du Dein PowerShell in PHP haben? Willst Du, dass die PowerShell das PHP aufruft (oder umgekehrt)?


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    Donnerstag, 4. August 2011 07:10
  • Hi,

     

    mittlerweile habe ich es hinbekommen. Ist vielleicht nicht ganz sauber, aber so klappts jetzt zumindest und zum testen OK.

    Wenn jemand einen besseren Vorschlag hat, bin ich gerne offen dafür. Vielleicht einer, wo alles schneller ausgegeben wird. :)

     

     

    <?php
    
    $datei = fopen("kundendisplay.ps1", "w");
    $geld = "1235,25";
    $betrag = "$geld Euro";
    
    $wert = str_pad($betrag, 20, ' ', STR_PAD_LEFT);
    
    $powershell = '$port=new-Object System.IO.Ports.SerialPort COM6,9600,None,8,one
    $port.open()
    $port.Write("'.$wert.'")
    $port.Write("     ")
    $port.Close()';
    
    fwrite($datei, $powershell);
    
    fclose($datei);
    
    $output = exec('powershell.exe -c C:\xampp\htdocs\kundendisplay.ps1');
    
    ?>
    

     

     

    Gruß


    Donnerstag, 4. August 2011 07:51
  • Moin,

    mittlerweile habe ich es hinbekommen. Ist vielleicht nicht ganz sauber, aber so klappts jetzt zumindest und zum testen OK.

    Wenn jemand einen besseren Vorschlag hat, bin ich gerne offen dafür. Vielleicht einer, wo alles schneller ausgegeben wird. :)

    es ist immer noch schwer, Dir Tipps zu geben, wenn Du einfach nicht verrätst, was Du am Ende als Ziel haben willst.Ich sehe nur eine Vermischung aus PHP und PowerShell, kann aber weder eine Ausgangssituation, noch eine gewünsche Zielsituation daraus verbindlich ableiten.

    Nur aufgrund der Interpretion deines Scriptes was zu schreiben, dafür haben wir hier vermutlich keine Zeit.


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    Donnerstag, 4. August 2011 07:59
  • Hi,

     

    ich habe eine lokale Webanwendung (Kassensystem). Dort werden Beträge eingegeben bzw. Produkte ausgewählt, die Preise hinterlegt haben und nach jeder eingabe auf einem Kundendisplay erscheinen sollen.

    Das gepostete Script ist nur eines, was zum Testen der Ausgabe dient.

     

    Gruß

    Donnerstag, 4. August 2011 08:04
  • Mensch, Du lässt Dir die Informationen aber auch aus der Nase ziehen.... :)

    Also "rate" ich mal:

     - Du hast eine reine PHP-Anwendung unter Windows, die nichts mit der PowerShell zu tun hat
     - Du willst damit ein Kassendisplay ansteuern
     - Du hast herausgefunden, wie es in der PowerShell geht

    Nun nun suchst Du einen Lösung, wie Du das am besten verbindest?


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    Donnerstag, 4. August 2011 08:06
  • Hi,

     

    :)  genau, habe ein Touchscreen Kassenrechner auf dem Windows7 läuft.

    Auf dem ist auch XAMPP wo die Software in PHP über den Browser läuft.

    Darüber will ich das Kundendisplay ansteuern, dass der Kunde auch die Beträge sieht (ist ja Pflicht).

    So wie ich oben das Testschnippsel gepostet habe funktioniert es.

    Ich erzeuge eine .ps1 Datei, die ich dann über exec mit der powershell ausführe. Bei jeder eingabe wird die Datei erzeugt und über die PowerShell an das Display geschickt.

    Gibt es da noch eine bessere Möglichkeit? Funktionieren tuts, aber mit einer Verzögerung von ca. 1-2 Sekunden, weil erst die Datei erzeugt werden muss und diese dann mit PowerShell aufgerufen wird. Kann ich die Powershellbefehe auch direkt an die Powershell schicken oder die Befehle anderes schreiben, dass es schneller geht?

     

    Gruß

    Donnerstag, 4. August 2011 08:39
  • Moin,

    ok, dann ist es klar.

    Ich finde es faszinierend, welche ungewöhnlichen Wege die Leute manchmal beschreiten, um ein Problem zu lösen, dass doch eigentlich offensichtliche nicht ausprobieren.

    Natürlich kann PHP auch nativ, also ohne irgendein Zusatzprogramm, auf serielle Schnittstellen zugreifen, das macht fopen:
    fopen ("COM1:", "w+");

    Schau mal hier:
    http://php.net/manual/en/function.fopen.php

    Der Eintrag ganz am Ende vom 22.04.2002 (2002!!!) beschreibt gleich zwei Varianten, auf die serielle Schnittstelle zu schreiben.

    Hier findest Du auch noch eine Lösung, die in die Richtung geht (dritte Anwort von Giorgos Pap):
    http://stackoverflow.com/questions/627965/serial-comm-with-php-on-windows


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    Donnerstag, 4. August 2011 08:45
  • Hi

     

    danke, mit fopen gehts ein gutes Stück länger.

    Man darf allerdings nicht vergessen zuvor das erste mal den COM Port zu setzen, wie es in deinem 2. Beispiel gemacht wird, sonst werden nur sonstige Zeichen ausgegeben.

    Sobald einmal gemacht, passt es.

     

    Gruß

     

    Donnerstag, 4. August 2011 10:20
  • Moin,

    danke, mit fopen gehts ein gutes Stück länger.

    "länger"? Du meinst "schneller", oder?

    Man darf allerdings nicht vergessen zuvor das erste mal den COM Port zu setzen, wie es in deinem 2. Beispiel gemacht wird, sonst werden nur sonstige Zeichen ausgegeben.

    Ja, das ist wichtig.

    Sobald einmal gemacht, passt es.

    Prima, dann brauchen wir nur noch einen Moderator, der das hier aus dem PowerShell ins PHP-Forum verschiebt... :)


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    Donnerstag, 4. August 2011 10:34
  • >Prima, dann brauchen wir nur noch einen Moderator, der das hier aus dem PowerShell ins PHP-Forum verschiebt... :)

    mhm... welches Forum hast du da genau im Blick? :)



    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Donnerstag, 4. August 2011 15:03
    Moderator