[PHP] Programm (CMD/BATCH) starten?!

2 Antworten

Moin,

"sichtbar gestartet" solltest Du vielleicht noch etwas ausführen. Ich gehe davon aus, dass Du ein Konsolenprogramm in php schreibst.

Wenn sichtbar meint, dass Du die .bat Datei in einem neuen Fenster gestartet haben willst, dann ist die Antwort von NerdyByNature genau die richtige.

Wenn Du einfach nur die Ausgabe sehen möchtest dann benutzt Du am einfachsten system(), im Gegensatz zu exec() wird damit einfach nur der Befehl ausgeführt ohne Interaktivität.

Möchtest Du stattdessen die Ausgabe der .bat Datei für deinen PHP-COde sichtbar machen, benutzt Du popen.

Ich hab das mal als Beispiel zusammengefasst:

// Der Pfad zu Deiner .bat Datei
$pfad = 'c:\pfad\zur\datei.bat';

echo "Methode 1\r\n";
/**
* Methode 1
* 
* Die .bat Datei wird einfach nur ausgeführt,
* alle Ausgaben werden in demselben Konsolenfenster
* dargestellt, in dem das PHP Skript gestartet wurde.
**/
system('cmd /c '.$pfad);

echo "Methode 2\r\n";

/**
* Methode 2
* 
* Die .bat Datei wird ausgeführt, alle eventuellen
* Ausgaben werden ausgegeben. Im Beispiel hier maximal
* 2096 Zeichen.
* Hier im Beispiel wird damit die Variable $read gefüllt
* und dann in Zeile 29 einfach ausgegeben.
**/
$handle = popen('cmd /c '.$pfad, 'r');
$read = fread($handle, 2096);
echo "Ausgabe der .bat Datei: ".$read;
pclose($handle);

echo "Methode 3\r\n";
/**
* Methode 3 von NerdyByNature
* 
* Durch die Verwendung von exec zusammen mit start wird ein
* neues Konsolenfenster in Windows geöffnet.
**/
exec('start '.$pfad);

Alle Methonden hatte ich schon ausprobiert... Trotzdem vielen Dank!

0

Hey Felix,

habe das gerade getestet und folgende Lösung hat bei mir funktioniert:

<?php 
    exec('start C:\DeinPfadZurBat\DeineBat.bat');
?>

Wenn Du zwischen start und C: ein /B setzt, wird die bat im Hintergrund ausgeführt, ohne das /B sichtbar, wie Du es wolltest...

Lieben Gruß,

NerdyByNature

Automatischer E-Mailversand php?

Kann mir jemand sagen was hier nicht funktioniert?

Die Emailadresse soll aus einem Formular genommen werden.

Es klappt aber nicht

hier der Prgrammcode:


//php_mailer verwenden
require 'src/Exception.php';
require 'src/PHPMailer.php';
require 'src/SMTP.php';
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

$mail = new PHPMailer(true);                                 // Passing

true
enables exceptions try {     //Server settings     $mail->SMTPDebug = 0;                                     // Enable verbose debug output     $mail->isSMTP();                                         // Set mailer to use SMTP     $mail->Host = 'smtp.web.de';                              // Specify main and backup SMTP servers     $mail->SMTPAuth = true;                                   // Enable SMTP authentication     $mail->Username = 'emailadresse';                // SMTP username     $mail->Password = 'passwort';                          // SMTP password     $mail->SMTPSecure = 'tls';                                // Enable TLS encryption,
ssl
also accepted     $mail->Port = 587;                                         // TCP port to connect to

    //Recipients     $mail->setFrom('emailadresse');     $mail->addAddress($email);                 // Add a recipient              //Content     $mail->isHTML(true);                                     // Set email format to HTML     $mail->Subject = 'Registrierung bei xxxxx';     $mail->Body    = 'Vielen Dank für Ihre Anmeldung auf xxxxx. </br>                       Ihre Daten werden zurzeit geprüft. </br>                       Sie erhalten weitere Informationen in den nächsten Tagen. </br>                        Mit freundlichen Gtüßen xxxx xxxxx';     $mail->AltBody = 'Vielen Dank für Ihre Anmeldung auf xxxxx. \n                       Ihre Daten werden zurzeit geprüft. \n                       Sie erhalten weitere Informationen in den nächsten Tagen. \n                        Mit freundlichen Gtüßen xxxx xxxxx';

    $mail->send();     echo '<h1> Die Registrierung wurde versandt und wird in nächster Zeit geprüft.</h1> </br>           <b> Kehren Sie zur <a href="http://xxxxx">Startseite</a> zurück.'; } catch (Exception $e) {     echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo ,'</br>           Bitte kontaktieren Sie emailadresse. '; }

?>

...zur Frage

Was möchtest Du wissen?