3

*nix システムで動作する php コードを書いています。PHP コード内で 5 つの引数を使用して Python スクリプトを呼び出す必要があります。一部の引数はユーザー入力であるため、任意の文字が存在する可能性があります。引数をスクリプトに渡す方法がわかりません。どのように引数を分離しますか?. たとえば、この質問では行末文字で区切りますが、私の引数ではユーザーが書いたものであれば何でもかまいません。そのような引数を渡す方法は? 何か案は?

編集:引数を渡す前に、各引用符記号 ' または " にエスケープ文字を入れるという考えがあります。反対側では、エスケープ文字を取り除きます。jsonエンコーディングはそれを行いますか?

4

2 に答える 2

3

必要な機能は次のescapeshellcmd()とおりです。

$arg1 = escapeshellarg($input1);
$arg2 = "foo";
$arg3 = escapeshellarg($input3);
$arg4 = "bar";
$arg5 = escapeshellarg("a string containing spaces and other *special* characters");
$proc = proc_open("python_prog $arg1 $arg2 $arg3 $arg4 $arg5", ...);

他のスレッドでは、プログラムは引数を取りませんでした。標準入力の項目を区切るために改行が使用されていました。

于 2012-07-27T06:38:19.660 に答える
1

基本的に、コマンドプロンプトでコマンドを実行しています。最初にコマンドプロンプトをよく理解しておくことをお勧めします。

パラメータはスペースで区切られます。したがって、入力にスペースが含まれている場合は、これらの入力を引用符で囲む必要があります(一重引用符を使用することをお勧めします。二重引用符を使用すると、特に環境変数が拡張されます)。

したがって、基本的には、入力内のすべての一重引用符、改行、および改行をエスケープし、それぞれを一重引用符で囲んでコマンドに追加する必要があります。

警告:セキュリティに関しては、このすべてが非常に問題があります。エスケープメカニズムが防弾ではない場合、誰でもサーバー上でコマンドを実行できます。

別の答えは、入力を一時ファイルに書き込み、Pythonスクリプトでこのファイルから読み取ることです。このスクリプトを制御できる場合は、それを実行することを強くお勧めします。

于 2012-07-27T05:19:46.953 に答える