PHP exec () ffmpeg ile değil çalışma

8 Cevap php

Ben (Ubuntu) PHP aşağıdaki komutu çalıştırmak için çalışılıyor:

<?php
 if (exec("/home/johnboy/ffmpeg/ffmpeg -i test1.mp4 -acodec aac -ab 128kb -vcodec mpeg4 -b 1220kb -mbd 1 -s 320x180 final_video.mov")) 
      { echo "Success"; }
      else { echo "No good"; }

Ve ben her zaman olsun "Hayır iyi" geri yankılandı, ve hiçbir dosya oluşturulur.

İlginçtir, ben Shell aynı tam komutu çalışıyor, herhangi bir sorun çalıştırırsanız.

Yukarıda aynı kodu çalıştırmak, ancak bunun yerine ffmpeg şeyler subsitute "whoami" Ayrıca, ne zaman çalışır. (Bu "Başarı" back yankıları)

Bu çalışma olmaz, neden herhangi bir fikir? Teşekkürler.

8 Cevap

Can apache / web kullanıcı reach /home/johnboy/ffmpeg/ffmpeg? Bu belki /home/johnboy yerine 0755 0700, nedir?

Belki de böyle bir büyük programın yüklenmesini ve tüm kütüphanelerini etkileyen kaynak sınırı vardır?

Eğer php cli sapi için komut dosyasını çalıştırın, doğru davranır? Apache kullanıcı olarak çalıştırırken bile?

Apache web kullanıcı php cli ile php komut dosyası çalıştırıldığında strace -ff ne gösteriyor?

stderr sonuç verecektir olsun

denemek

ffmpeg -i inputfile [more_params] 2>&1

There would be some issues if you want to execute something that way.
1. Maybe you have some permission issue, the webserver have limitation to handle some execution to the system.
2. Maybe your path file is incorrect.
3. you can try to use shell_exec to perform the execution to the system.

Anyway, what I would do to make my execution would go smoothly are, I will write 2 programs with message passing included between them, for example client server program. The server would wait some messages from the client to execute some command (all of the command, it would be no permission issues). All you have to do in you web is to call your client application.

Benim vurgulamak web ve sistemden bazı arayüz inşa etmektir. Bu izin sorunları ile sorun bir sürü çözmek olacaktır.

bu yardım umuyoruz.

Bunu kullanın

$ffmpeg = "ffmpeg Installed path";
$flvfile = "source video file with root path";
$png_path " "Destination video file with root path and file type";


exec("$ffmpeg -y -i $flvfile -vframes 1 -ss 00:01:60 
     -an -vcodec png -f rawvideo -s 110x90 $png_path");

Sen dosya adlarına göreli yolları kullanıyor. Eğer sağ dizinde komutu yürütmeden emin misiniz?

Fonksiyonu exec () Sadece çıktı son satırı döndürür, ben bu komutun son satırı boş olduğunu sanıyorum. Eğer komutun tüm içeriğini isterseniz shell_exec () kullanmalısınız.

Ayrıca komut yürütme nerede takip deneyin: print(shell_exec("pwd"));

Safemode etkinleştirin ve bu iş olacak

$output = shell_exec('/home/person/www/ffmpeg 2>&1');
echo "<pre>$output</pre>";

2> & 1 parçasını fark ...