Jan: Anwendung starten unter Windows XP

Hallo zusammen,

für ein rein lokales Projekt habe ich mir XAMPP installiert, also MySQL, Apache und PHP im Paket.

Wenn ich das Script aus der Commandline starte funktioniert folgender Aufruf:
exec('c:\programme\videolan\vlc\vlc.exe d:\irgendein.mpg');

Der Player öffnet und spielt das angegebene Video ab. Klappt alternativ auch mit "popen", "passthru" oder "system".
Versuche ich das Script (egal in welcher Variation) im Browser zu öffnen, gibt er Testausgaben vor und nach dem Aufruf aus, startet aber den Player nicht. Das Script liegt im htdocs des Apache.

Wo ist mein Denkfehler? Gibt es da eine Sicherheitseinstellung im Apache die ich übersehen habe? Es kommt aber auch weder eine Fehlermeldung noch ein Timeout.

Ausserdem lässt sich das nicht asynchron starten. Er wartet immer, bis der Player beendet ist, bevor er weitermacht. Hierzu habe ich bisher auch nichts gefunden.

Hat jemand eine Idee?

Danke und Gruss
Jan

  1. Noch eine Ergänzung. Testweise habe ich nun statt dem VLC nun mal ein zweites PHP-Script aufgerufen. Über die Commandline gibt er eine Textausgabe im zweiten Script aus, im Browser nicht. Es scheint also so, als ob ein externer Aufruf über den Browser komplett ignoriert wird.

    1. Hellihello Jan,

      Noch eine Ergänzung. Testweise habe ich nun statt dem VLC nun mal ein zweites PHP-Script aufgerufen. Über die Commandline gibt er eine Textausgabe im zweiten Script aus, im Browser nicht. Es scheint also so, als ob ein externer Aufruf über den Browser komplett ignoriert wird.

      Ich dachte, der Browser geht an den Apachen, der wieder an die php.exe. Das wäre ident mit Commandline: php.exe -f skripname.php. Vielleicht gilt eine andere php.ini? Und der safe_mode ist on? Dann wäre shell_exec() oder commandline in backticks nicht möglich.

      Was sagt er denn zu echo dir /p?

      Dank und Gruß,

      frankx

      1. Hi,

        Ich dachte, der Browser geht an den Apachen, der wieder an die php.exe.

        PHP kann nicht nur ueber das CLI, sondern auch als Apache-Modul eingebunden werden.

        MfG ChrisB

  2. Hellihello Jan,

    Wenn ich das Script aus der Commandline starte funktioniert folgender Aufruf:
    exec('c:\programme\videolan\vlc\vlc.exe d:\irgendein.mpg');

    Der Player öffnet und spielt das angegebene Video ab. Klappt alternativ auch mit "popen", "passthru" oder "system".
    Versuche ich das Script (egal in welcher Variation) im Browser zu öffnen, gibt er Testausgaben vor und nach dem Aufruf aus, startet aber den Player nicht. Das Script liegt im htdocs des Apache.

    Wo ist mein Denkfehler? Gibt es da eine Sicherheitseinstellung im Apache die ich übersehen habe? Es kommt aber auch weder eine Fehlermeldung noch ein Timeout.

    MMn: eigentlich sollte es klappen.

    Du könntest Dich rantasten.

    Erstmal mit "calc.exe" zum beispiel probieren. Vielleicht liegts ja doch an der Pfadangabe. Alternativ auch mal vielleicht eine Batchdatei starten. Aber im Grunde sollte es genau so gehen und Commandline (phpcli.exe) keinen Unterschied machen. Bei mir lässt sich glaube ich auch die php.exe per Commandline aufrufen. Den Unterschied hab ich nicht so wirklich kapiert.

    Ausserdem lässt sich das nicht asynchron starten. Er wartet immer, bis der Player beendet ist, bevor er weitermacht. Hierzu habe ich bisher auch nichts gefunden.

    Spontan weiß ichs auch nicht. Vielleicht kannst Du den Request ja per AJAX/XMLHttpRequest starten.

    Dank und Gruß,

    frankx

  3. Hallo Jan,

    habe das gleiche Problem und ein bissel rumexperimentiert.
    In der DOS-Box klappt alles wie gedacht, im Browser gibt es Probleme.
    Mein Testscript:

    <?php  
    $command = 'cd';  
    $AA = array();  
    $ii = '';  
    exec($command, $AA, $ii);  
    echo '[<b>'.$ii.'</b>] ('.count($AA).")\n";  
    foreach($AA as $line) {  
        echo trim($line)."\n";  
    }  
    ?>
    

    Hier wird der aktuelle Pfad ausgegeben. Mit
    <?php $command = 'dir'; ?>
    erhaelt man die erwaertete Uebersicht, aber bei

    <?php $command =  
     'C:\WINDOWS\system32\sndrec32.exe D:\_home\htdocs\exec.wav'; ?>
    

    steigt exec() aus.
    D.h. kein Eintrag in der XP-Ereignisanzeige oder im php-error.log
    Im Access.log erscheint nach 300s(Apache-Timeout) ein Eintrag,
    ebenso im Error.log des Indianers:
    [Sat Jan 12 11:05:48 2008] [error] [client 192.168.2.20] (70007)
     The timeout specified has expired: ap_content_length_filter:
     apr_bucket_read() failed, referer: http://home.npf/

    Wenn man nach dieser Fehlermeldung in Google sucht, kommen je nach
    Fragestellung 3-16 Seiten, in denen jedoch auch nur gefragt und nie
    wirklich verwendbares geantwortet wird ... :-((

    Na-ja, vielleicht kennt sich hier jemand damit aus ...

    Gruss und Dank
    Norbert

  4. Hellihello Zusammen,

    also ich habe nur

      
    echo `dir /p`;  
    
    

    getestet, und das "funzt". Auch mit Brause.

    Dank und Gruß,

    frankx

    1. Hallo frankx,

      habe nur
      echodir /p;
      getestet, und das "funzt". Auch mit Brause.

      hmm,
      und dafuer hast Du zwei(2) Stunden gebraucht?
      War doch nur copy/paste zu machen ... ts ts ts

      Ansonsten ist "dir" ein Systembefehl, die funktionieren alle!

      Gruss und Dank
      Norbert

      1. Hellihello Norbert,

        habe nur
        echodir /p;
        getestet, und das "funzt". Auch mit Brause.
        hmm,
        und dafuer hast Du zwei(2) Stunden gebraucht?

        Wie kommst Du auf zwei Stunden?

        War doch nur copy/paste zu machen ... ts ts ts

        Das hatte ich hier schon rumfliegen.

        Ansonsten ist "dir" ein Systembefehl, die funktionieren alle!

          
        <?php  
        echo "dircomes";  
        echo `dir /p`;  
        echo "diraftercalcbefore";  
        echo `calc.exe`;  
        echo "calcafter";  
        ?>  
        
        

        geht bei mir aber auch. Per commandline
        "... php.exe" -f backtick.php

        und mit localhost/backtick.php im FF bei laufendem Apache (aus xampp).

        Oder hab ich was falsch verstanden?

        Dank und Gruß,

        frankx

        --
        tryin to multitain  - Globus = Planet != Welt