PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPの実行演算子(バッククォート)とは?使い方と注意点を解説

はじめに

PHPには、実行演算子がひとつだけ定義されています。それがバッククォート(``)です。バッククォートで囲まれた文字列は、WindowsではDOSコマンドとして、UNIX/Linux環境ではシェルコマンドとして実行され、その実行結果(標準出力)が文字列として返されます。この演算子の動作は、PHPのshell_exec()関数とほぼ同じものです。

まずは、dirコマンドを実行して結果を文字列として取得・表示する例から見ていきましょう。

例:dirコマンドを実行する

<?php
$list = `dir *.php`;
echo "$list";
?>

出力結果

上記のコードを実行すると、次のような結果が表示されます。

Volume in drive C is Windows 10
Volume Serial Number is 540D-CE99
Directory of C:\xampp\php
01/27/2016 05:32 PM    18,869 CompatInfo.php
07/08/2020 06:40 PM        64 test.php
07/11/2020 02:13 PM        48 testscript.php
03/30/2013 05:59 PM     1,447 webdriver-test-example.php
               4 File(s)         20,428 bytes
               0 Dir(s)  178,002,157,568 bytes free

続いて、バッククォート演算子でtypeコマンドを実行する例を見てみましょう。

例:typeコマンドを実行する

<?php
$list = `type testscript.php`;
echo "$list";
?>

出力結果

このコードを実行すると、testscript.phpファイルの中身が出力されます。

クォートの違いに注意

コマンドをシングルクォートやダブルクォートで囲んだ場合は、単なる文字列として扱われるため、コマンドは実行されません。シェルコマンドとして実行したい場合は、必ずバッククォートで囲む必要があります。

<?php
// バッククォート:シェルコマンドとして実行される
$list = `type testscript.php`;

// シングルクォート:実行されず、ただの文字列になる
$list = 'type testscript.php';
?>

セキュリティに関する注意点

バッククォート演算子は、OSのシェルコマンドを直接実行できる強力な機能である一方、セキュリティリスクも高いという側面を持っています。ユーザーからの入力値をそのままコマンドに渡すと、OSコマンドインジェクション攻撃を受ける危険性があります。外部入力を扱う場合はescapeshellarg()escapeshellcmd()によるエスケープを必ず行うか、可能であればPHPネイティブの関数で代替することを推奨します。

  1. PHPのftp_raw()関数とは?使い方とサンプルコードを解説

    ftp_raw() 関数は、FTPサーバーに対して任意の生コマンド(RAWコマンド)を直接送信するためのPHPの組み込み関数です。標準のFTP関数ではカバーされていない操作を実行したい場合に特に役立ちます。 構文 ftp_raw(con, command) パラメータ con − FTP接続リソース command − 実行したいコマンド 戻り値 ftp_raw() 関数は、サーバーからの応答を文字列の配列として返します。応答が複数行にわたる場合でも、各行が配列の要素として格納されるため、柔軟に処理できます。 使用例 以下は、ftp_raw() 関数を使ってFTPサーバーに接続し、USER

  2. PHPのftp_exec()関数とは?FTPサーバー上でコマンドを実行する方法を解説

    ftp_exec()関数は、PHPでFTPサーバー上のコマンドを実行するために使用される組み込み関数です。この関数を使うことで、接続中のFTPサーバーに対して任意のシステムコマンド(例:ファイル一覧の取得など)を送信し、実行結果を得ることができます。 なお、この関数が動作するかどうかは、FTPサーバー側がSITE EXECコマンドに対応しているかに依存します。対応していないサーバーでは実行に失敗するため注意が必要です。 構文 ftp_exec(con, command) パラメータ con − ftp_connect()で確立したFTP接続リソースを指定します。 command − FTPサ