2017-09-06 2 views
0
<?PHP 
    exec("ffmpeg.exe -i something.mp4 -ss 1 -t 1 -r 1 -s 320x240 -y something.jpg"); 
?> 

Der Aufruf dieser Skript führt zu einem Serverfehler 500 jede zweite Anfrage. PHP 7.01, IIS 10.PHP Exec (ffmpeg) nicht auf IIS jede andere Anfrage

Ich habe bereits ausgeschlossen, dass das Problem mit den spezifischen ffmpeg Parameter meines Aufrufs verbunden sein kann.

Die Ausführung ist < als 1 Sekunde, es kann also kein PHP- oder IIS-Skript-Ausführungstimeout sein.

Egal wie viel Zeit zwischen einem "Aufruf" zum Skript und dem nächsten vergeht, die ungeradzahligen Aufrufe führen zu Fehler 500, die geradzahligen Aufrufe sind in Ordnung.

Beachten Sie, dass wenn ich "Anruf" sage, ich tatsächlich auf das Skript (d. H. http://server/script.php) verweisen - während, wenn ich 2,3 oder 100 Aufrufe an Exec innerhalb des gleichen Skripts setzen, werden sie alle erfolgreich sein.

Edit: Ziemlich zufällig habe ich versucht, ein Timeout auszulösen, indem ich die gleiche Exec ("ffmpeg etc.) Zeile 100 mal in einer Schleife aufruft. Zu meiner Überraschung verschwindet der Error 500. Also entfernte ich die Schleife und fügte eine hinzu ähnliche Pause durch einen Anruf Hinzufügen schlafen (10): der Fehler 500 zurückkehrt, und es ist sofort - wie der Server das Skript sogar vor Parsen läuft nicht Jetzt bin ich total verloren ..

Jeder Hinweis

.?
+0

Wahrscheinlich nicht verwandt, aber entfernen Sie das '-t 1' und fügen Sie' -vframes 1' hinzu. Da Sie nur ein Bild ausgeben, ist der Befehl "fehlgeschlagen" und der Beendigungscode ist ungleich Null. – Mulvya

+0

@Mulvya danke. Wie Sie jedoch richtig geraten haben, keine Änderung. Ich vermute, dass dies mehr ein FastCgi-Einstellungsproblem als sonst sein könnte ... – resle

Antwort

0

Nun, es scheint, dass die Änderung des FastCGI-Protokolls für PHP von Named Pipe zu TCP, das Problem behoben.

Es wäre immer noch interessant, thoug h, zu verstehen, was Named Pipes jedes Mal sofort zum Scheitern bringt. Die Einstellung "Named Pipe Flushing" hat nicht geholfen.