外部コマンドを扱うときは、次の 3 つが基本になります。
sprintf:文字列をフォーマットしてコマンドを組み立てる
escapeshellarg:引数を安全にエスケープする
exec:コマンドを実行して結果を受け取る
🧱 1. sprintf:フォーマットしてコマンドを組み立てる
役割
「%s の部分に変数を埋め込んで、整った文字列を作る」
$cmd = sprintf('cwebp %s -o %s', $input, $output);
🛡 2. escapeshellarg:引数を安全にする
役割
「シェルで危険な文字を無害化して、1つの引数として扱わせる」
$input = escapeshellarg($inputPath); $output = escapeshellarg($outputPath);
🚀 3. exec:コマンドを実行して結果を受け取る
exec($cmd, $output, $ret);
引数の意味
$cmd:実行するコマンド
$output:コマンドの標準出力(配列で返る)
$ret:終了ステータス(0 が成功)
exec($cmd, $output, $ret); if ($ret !== 0) { echo "エラーが発生しました"; }
🧩 3 つを組み合わせた「正しい外部コマンド実行」
$input = escapeshellarg($inputPath); $output = escapeshellarg($outputPath); $cmd = sprintf( 'cwebp %s -o %s', $input, $output ); exec($cmd, $outputLines, $ret); if ($ret !== 0) { // エラー処理 }