【PHP8.x】shell_exec関数の使い方
shell_exec関数は、指定されたシェルコマンドを実行し、その実行結果を文字列として取得する関数です。この関数は、PHPスクリプトの中からオペレーティングシステム(OS)のコマンドや外部のプログラムを実行したい場合に利用されます。たとえば、ファイルの情報を一覧表示するls
コマンドや、システムの状態を確認するuptime
コマンドなどをPHPコードから実行し、その標準出力の内容をPHPの変数として受け取ることができます。
コマンドが正常に実行され、何らかの標準出力(STDOUT)があった場合、その出力内容全体が単一の文字列として返されます。もしコマンドが標準出力を行わなかった場合や、実行に失敗して何も出力されなかった場合は、NULL
が返されます。標準エラー出力(STDERR)は戻り値には含まれないため、エラーメッセージを捕捉したい場合は、コマンド内で2>&1
のようにリダイレクトするなどの工夫が必要です。
特に重要な点として、この関数を使用する際はセキュリティに十分な注意が必要です。ユーザーからの入力値を直接コマンドに含めると、悪意のあるコマンドが実行されてしまう「コマンドインジェクション」という脆弱性を引き起こす可能性があります。そのため、ユーザー入力をコマンドに渡す際には、必ずescapeshellarg()
やescapeshellcmd()
といった関数を使用して、特殊文字を適切にエスケープすることが強く推奨されます。実行されるコマンドはPHPが動作しているサーバーのOS環境に依存するため、環境間の互換性も考慮する必要があります。
基本的な使い方
構文(syntax)
<?php
$command = 'ls -l';
$output = shell_exec($command);
echo $output;
?>
引数(parameters)
string $command
- string $command: 実行したいシェルコマンドを文字列で指定します
戻り値(return)
string|null
実行したコマンドの標準出力結果を文字列として返します。コマンドの実行に失敗した場合は null を返します。