2017-12-07 31 views
-2

1つのビデオファイルだけで静的にPHP exec()を実行しようとしている場合は、そのビデオを完全に圧縮しようとしています(をご覧ください)を参照してください。exec()がforeachループで動作しないのはなぜですか?

後でループで動的に圧縮すると、exec関数が機能しません。なぜループしていないのか教えてください。 ...空かもしれませんoutptutからPHP shell_exec()しかし
exec()戻って最後の行だけだから、より多くの有用なデータを取得するために、第2の$出力と第三パラメータ$ return_varを提供する必要があります。

// echo shell_exec("/usr/local/bin/ffmpeg -i /home4/machine/public_html/riyaz/check_video/video_1494453415.mp4 -strict -2 -crf 20 /home4/machine/public_html/riyaz/zcompress/video_1494453415.mp4"); 

@include_once("start.php"); 

$directory_path = FILEPATH.'/'; 

$video_mp4 = glob("/home4/machine/public_html/riyaz/check_video/*.mp4"); 

/*video size will show in mb*/ 
foreach ($video_mp4 as $video_mp4_list){ 

    $video_size = filesize($video_mp4_list); 
    $video_size_in_mb = round(($video_size/1048576), 2); 

    $get_file_name = explode('/',$video_mp4_list); 
    $get_file_name_for_destination = $get_file_name[6]; 

    $getSourceFileNamePath = '/home4/machine/public_html/riyaz/check_video/'.$get_file_name_for_destination; 
    $getDestFileNamePath = '/home4/machine/public_html/riyaz/zcompress/'.$get_file_name_for_destination; 

    if ($video_size_in_mb >= 1000){ 

     echo exec("/usr/local/bin/ffmpeg -i ". $getSourceFileNamePath ." -strict -2 -crf 20 ".$getDestFileNamePath); 
    } 
} 
+0

1.報告されているエラーは何ですか? 2. else {echo "ビデオが小さすぎて進行することができない";} – ino

+0

実行の前にコマンド文字列をエコーし​​、それが上のコメント行と同一であるかどうかを確認します。 –

+0

@ino 1.何も報告していません2.他の部分も追加しても、出力に変化はありません。何かを印刷しようとするとループに入りますが、exec()は実行されません。 – Riyaz

答えて

-1

shell_exec()は、完全な出力を返します。 :PHP exec()

if ($video_size_in_mb >= 1000){ 
    $command = "/usr/local/bin/ffmpeg -y -i ". $getSourceFileNamePath ." -strict -2 -crf 20 ".$getDestFileNamePath . ' 2>&1'; 
    echo PHP_EOL ."Executing command: ". $command; 
    if(file_exists($getDestFileNamePath)) echo "File already exists!"; 
    $output = null; 
    $return_var = null; 
    exec($command, $output, $return_var); 
    print_r($command); 
    print_r($return_var); 
    print_r($output); 
    echo PHP_EOL; 
} else { 
    echo "video too small to proceed'; 
} 

php shell_exec() vs exec()

EDIT:問題はその先FILですeが存在し、ffmpegは何もせずに終了します。 1つの解決方法は、属性-yを使用して出力ファイルを上書きすることです。5.4 Main options -y (global) Overwrite output files without asking.

+0

出力で1Array()1Array()を表示しています空白の配列が表示されます – Riyaz

+0

@Riyaz good、1は$ return_var、Array()は空の$出力です。 fmpeg return code '1 'を意味します。 – ino

+0

return_varのPHP exec()ドキュメントから: "return_var return_var引数が出力引数とともに存在する場合、実行されたコマンドの戻りステータスはこの変数に書き込まれます。 " – ino

関連する問題