Winamp mit PHP starten

Guten Tag meine Damen und Herren,

ich habe folgendes Problem! Mit MySql und MyOdbc hab ich eine Datenbank auf meinem PC erstellt, die alle mp3, die ich besitze, in eine Tabelle geladen hat. Nun hab ich mir ein Script geschrieben, dass beim Ausführen Winamp starten sollte, und genau hier versagt das Script. Wenn ich die „winamp.exe“ mit „shell_exec“ oder „exec“ öffne, dann startet zwar winamp, allerdings wird er nur vom taskmanager angegeben und nach dreißig Sekunden setzt mein Browser den Timeout! Meine Frage lautet nun:

Weiß jemand wie ich externe Programme (in diesem speziellen Fall Winamp) starten kann?

Vielen Dank im Voraus für Hilfe!

Weiß jemand wie ich externe Programme (in diesem speziellen
Fall Winamp) starten kann?

Jepp:

PHPs shell_exec() und exec() sind darauf ausgelegt einen Befehl zu starten, zu warten bis er ausgeführt wurde und dann die Rückgaben anzunehmen.

Solange du Winamp noch geöffnet hast, wartet PHP. Irgendwann ist Maximum Script Execution Time (30s sind standard) erreicht und PHP stoppt die Ausführung.

Probier mal, Winamp mit start zu öffnen. Start ist ein Kommandozeilenbefehl, der andere Programme startet. Man benutzt es zum Beispiel um Windows-Programme aus DOS-Stapelverarbeitungsdateien (.bat) heraus auszuführen.

Öffne mal cmd und tipp

start /?

ein. Du bekommst dann aufgelistet, wie Start funktioniert. Ich nehme an, dass du Parameter an Winamp übergeben willst, das musst du erst nachlesen.

Die prinzipielle Syntax ist dann

start C:\Programme\Einamp\winamp.exe

Um den Pfad dürfen keine Anführungszeichen sein, sonst wird er als Fenstertitel interpretiert.

Hoffe das hilft

Hoffe das hilft

Leider nein, denn start hat offensichtlich ein Problem damit, dass ich zwei Dateien angebe… Um eine mp3 mit Winamp zu starten muss die mp3 hinter der Winamp.exe stehen.

Bsp. E:/Programme/Winamp/winamp.exe E:/MUSIK/lied.mp3
der komplette Befehl wäre dann:

start E:/Programme/Winamp/winamp.exe E:/MUSIK/lied.mp3

und das mag er nicht…

was heißt „mag er nicht“… ggf. könntest du anführungszeichen setzen… also z.b.

start „E:/Programme/Winamp/winamp.exe E:/MUSIK/lied.mp3“

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Jetzt bin ich verwirrt. Entgegen meiner vorherigen Aussage muss ich nun feststellen, das der Start - Befehl sehr wohl funktioniert, zumindest als Kommandozeile! Aber wenn ich ihn in php einbinde schmiert mir der Browser weiterhin ab…

Kommandozeile: start runas /savecred /user:smiley:omain\user „c:/Programme/winamp/winamp.exe C:/lied.mp3“

php-Zeile:
system("start runas /savecred /user:smiley:omain\user „c:/programme/winamp/winamp.exe c:/1.mp3"“);

ICH HAB’S *mitDemLösungszettelWink*

Hi,

oh man, was ein gewurschtel, hier die Lösung:

  1. Zunächst mal musst du den gecrashten Winamp-Prozess loswerden. Im Taskmanager kannst du ihn nicht abschiessen, d.h. du musst entweder den Process Explorer von Sysinternals.com nehmen oder den Rechner einmal neustarten.

  2. PHP (genauer: Der Apache) hat keine Rechte auf „deinen Desktop zuzugreifen“ und somit Programme vernünftig zu starten. Die musst du ihm erst geben:
    Systemsteuerung -> Verwaltung -> Dienste -> Apache2 -> Eigenschafen -> Reiter „Anmelden“ -> Haken bei „Datenaustausch zwischen…“ machen

Dann (sehr wichtig) Apache neustarten. Der Dienst muss komplett beendet sein, nimm also im Zweifelsfalle lieber „Stop“ und „Start“ anstelle von „Restart“.

  1. Jetzt lässt sich Winamp starten. Problem ist immer noch, dass der Browser endlos auf Scriptbeendigung wartet, weil exec auf Winamp wartet. Schliesst du Winamp, hört auch der Browser auf zu laden. Is ja kein Zustand so, deshalb machen wir das ganze jetzt dreisterweise nicht über die Shell, sondern über einen direkten Prozessaufruf. Das Prozesshandle schmeissen wir anschliessend einfach weg.

Vorteil: PHP hat nix mehr mit der Sache zu tun und kann beenden.
Nachteil: Unsauber, aber wen juckts :wink:

Das ganze sieht dann so aus:

<?php $handle = popen('start C:\Programme\Winamp\Winamp.exe "E:\Geklaute Musik\Lied1.mp3" "E:\Geklaute Musik\Lied2.mp3"', 'r');
pclose($handle); ?\> Du kannst soviele Lieder in die Parameter hauen, wie du willst (weiss nicht wodurch der String evtl. begrenzt sein könnte, aber prinzipiell halt.) Sonst eben 'ne Playlist erstellen und die übergeben. Fertig, Ende. Gut?

Fertig, Ende.
Gut?

Hammer! Ich danke dir tausendfach! Ich hatte innerlich mich schon von der Vorstellung verabschiedet, das mit PHP zu schaffen! Aber ja, es funktioniert herrvoragend! Und auch wenn es unsauber ist, ist es trotzdem saugeil!
Als Link dazu http://tut.php-q.net/savepoint.html, besonders interessant der Punkt 4, indem behauptet wird, man könne Winamp nicht per PHP starten!

„E:\Geklaute Musik\Lied1.mp3“ „E:\Geklaute Musik\Lied2.mp3“’,

Nix Geklaut! Aber tierisch viel Musik, weil ich die alten Platten auf dem Dachboden digitalisiert habe!

Der Vollständigkeit halber: Der Hinweis auf http://tut.php-q.net/savepoint.html stimmt. Er bezieht sich auf das Winamp-Starten beim Client, was ja wirklich nicht möglich ist. Du bist Server.

Egal, freut mich dasses funzt.

Gruß

Zed

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]