• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

Cmd mit php code starten und ausführen. [php]

Diskordier

Neu angemeldet

Registriert
14 Juli 2013
Beiträge
161
Hallo leute, ich möchte über einen Button auf einer Webseite, ein programm in cmd starten mit bestimmten mit gegebenen datensätze.

Noch steh ich noch gant am Amfang und ich scheitere schon daran mit php Notepad auf meinem pc zu starten

[src=php]if ($_POST["sn"] == "cr"){

exec('C:\Windows\System32/cmd.exe /c start notepad++"');



exec('cmd.exe /c "C:\xampp\htdocs\_start.bat"'); [/src]

nur bekomme ich leider keinen Fehler angezeigt so das mir nicht kar ist wo der fehler liegt.

mir ist klar das man notepad nicht auf einem server starten soll , ist ja nur mal zum testen, das was ich dann starten will wird nur in der cmd ausgeführt.
 
Zuletzt bearbeitet:

Timon3

Team ModMii

Registriert
17 Juli 2013
Beiträge
499
Der exec-Befehl führt in einer Windows-Umgebung laut den Kommentaren der Dokumentation "cmd /c command" aus. Das bedeutet also, dass du dir den Anfang schonmal sparen kannst. Außerdem besteht die Frage, ob notepad++ zur Path-Variable hinzugefügt wurde, ohne die das natürlich nicht geht. Zudem: Wo sind die ersten doppelten Anführungszeichen? Die brauchst du nicht, ab PHP/5.3 werden die Anführungszeichen automatisch angefügt (falls du sie also da hast, wird das Programm scheitern).
 

Diskordier

Neu angemeldet

Registriert
14 Juli 2013
Beiträge
161
  • Thread Starter Thread Starter
  • #3
also ich brauche die doppelten Anführungszeichen sonst failt das programm.

so ich hab nun folgendes, die bat wird nun wohl gestartet. jedoch wird sie direkt ausgeführt im prinzip soll die bat gestartet werden und dann wir danach noch eine variable an cmd übergeben und ausgeführt damit die bat das richtige macht , nur bekomme ich es nicht hin cmd was mit zu geben sprich die bat wird ausgeführt ohne eine mit gegebene variable.

[src=php] system('cmd.exe /c "C:\xampp\htdocs\_start.bat", $crlink ');[/src]

es gibt ja noch

shell_exec($Link);
 

virtus

Gehasst

Registriert
24 Apr. 2015
Beiträge
1.689
Ort
AUF DEM MOND
Läuft dein Script auf einem Windows oder einem Unix-artigen System (Linux, Mac)?
Der Verzeichnisstruktur nach wohl unter Windows.


Außerdem wäre es interessant deine System/ PHP-Konfiguration zu kennen.
Welche PHP Version verwendest du und ist der Safe Mode aktiviert?
exec verhält sich, je nach dem unterschiedlich.

Außerdem solltest du beachten:

php.net schrieb:
Falls Sie diese Funktion benutzen, um ein Programm zu starten und im Hintergrund weiterlaufen lassen möchten, müssen Sie sicherstellen, dass die Ausgabe des Programms in eine Datei oder einen anderen Ausgabestream umgeleitet wird. Anderenfalls wird PHP solange hängen, bis das Programm zu Ende ausgeführt wurde.

Bei notepad wird das Programm starten und da es theoretisch "weiterläuft" bis es manuell beendet wird, wird auch entsprechend dein PHP-Script hängenbleiben. [Irgendwann timeouted es natürlich.] Gleiches gilt für system und passthru. Allgemein bin ich nicht sicher, ob es sinnvoll ist GUI-Programme via Script zu starten.

Versuch doch erst mal einen VLC Server zu starten, der braucht nämlich nicht zwangsweise eine grafische Oberfläche und du hast über den Soundoutput eine gute Kontrollmöglichkeit, ob dein Kommando ausgeführt wird:

Windows, VLC 64bit:
[src=bash]C:\Program Files\VideoLAN\VLC\vlc.exe -I http http://download.wavetlan.com/SVV/Media/HTTP/MP3/Helix_Mobile_Producer/HelixMobileProducer_test2_MPEG1_Stereo_CBR_96kbps_32000Hz.mp3[/src]
Windows, VLC 32bit:
[src=bash]C:\Program Files\VideoLAN (x86)\VLC\vlc.exe -I http http://download.wavetlan.com/SVV/Media/HTTP/MP3/Helix_Mobile_Producer/HelixMobileProducer_test2_MPEG1_Stereo_CBR_96kbps_32000Hz.mp3[/src]

Beschwerden wegen des MP3-Files bitte nach /dev/null, das war die einzige MP3 Datei, die ich auf die Schnelle frei im Web finden konnte. ;)

In PHP könnte das etwa so aussehen:

[src=php]<?php
# Konfiguration:

// 64bit player verwenden
// true präferiert den 64bit player
// false präferiert den 32bit player
$prefere64 = true;

// Standardverzeichnisse für VLC
$players = array(0 => "C:\Program Files\VideoLAN\VLC\vlc.exe", 1 => "C:\Program Files\VideoLAN (x86)\VLC\vlc.exe");

// Sample Mediadatei
$media = "http://download.wavetlan.com/SVV/Media/HTTP/MP3/Helix_Mobile_Producer/HelixMobileProducer_test2_MPEG1_Stereo_CBR_96kbps_32000Hz.mp3";

// Musikbibliothek
$dldir = "Downloads";

// Helferlein
function initLib($dldir, $media){
// Bibliothek anlegen, falls nicht existent
if(!is_dir($dldir)){mkdir($dldir);}

// Dateinamen aus Pfad extrahieren
$pi = pathinfo($media);
$bn = $pi['basename']; // HelixMobileProducer_test2_MPEG1_Stereo_CBR_96kbps_32000Hz.mp3
// Zieldatei
$filepath = $dldir . DIRECTORY_SEPARATOR . $bn;

// Datei in Bibliothek importieren, falls nötig
$result = false;
if(!file_exists($filepath)){
$content = file_get_contents($media); // Binary lesen
$result = file_put_contents($dldir . DIRECTORY_SEPARATOR . $bn, $content); // Binary schreiben
// Windows: Downloads/HelixMobileProducer_test2_MPEG1_Stereo_CBR_96kbps_32000Hz.mp3
// Unix: Downloads\HelixMobileProducer_test2_MPEG1_Stereo_CBR_96kbps_32000Hz.mp3
}else{
$result = true; // file existiert
}

return $result;
}

// Bibliothek initialisieren
initLib($dldir, $media);

// Helferlein
function selectPlayer($players, $prefere64){
// kein 64bit, dann drehe die Liste
$players = (!$prefere64) ? array_reverse($players) : $players;

// suche den ersten installierten Player
foreach($players as $player){
if(file_exists($player)){
return $player;
}
}

// kein Player gefunden
return false;
}

if(($player = selectPlayer($players, $prefere64))!==false){
// starte Player mit http Interface und Mediafile
exec($player . ' -I http ' . $media);
}else{
// Warnung
die('No supported player found!');
}
?>[/src]
 
Zuletzt bearbeitet:

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.760
Ort
in der Zukunft
schon alleine aus Sicherheitsgründen würde ich deine Variable / den zu Übergebenden Wert in eine Datenbank speichern und dann lieber mit passenden Rechten einen Cron / Taskplaner laufen lassen der z.B. alle 5s deinen Befehl ausführt und die Werte aus einem File / der DB ausliest...
Dann hast du zum einen Rechtetrennung zwischen Webserver und der auszuführenden Aufgabe und kannst zum anderen Sicherstellen das nicht irgendwas in den exec() Befehl eingeschleust wird... Ganz davon abgesehen das der Befehl nicht Grundlos auf vielen Systemen deaktiviert ist (weiß ja nicht wo und wie du das später produktiv laufen lassen möchtest.)
 

virtus

Gehasst

Registriert
24 Apr. 2015
Beiträge
1.689
Ort
AUF DEM MOND
Das ist natürlich ein sinnvoller Beitrag. Allerdings hoffe ich, dass dem TS klar ist, welche Sicherheitsrisiken ein exec reißen kann, wenn freie Nutzereingaben verarbeitet werden.
 
Oben