コード行を作成するときに、特定の文字をエスケープする必要がある場合があります。
自分で答えられない状況にぶつかりました。
PHPでは、execコマンドには引用符( ')で囲まれた文字列が必要です。引用符( ')で囲まれた文字列を必要とする/bin/bash -cコマンドを呼び出そうとします。
この問題の解決策は次のとおりです。
$line = exec('/bin/bash -c \'read -e -p "Check to confirm string: " -i "'.$preFill.'" input; echo $input\'');
ユーザーに提案するテキストに文字( ')を挿入しない限り、問題はありません。インタラクティブモードでphp -aを使用するいくつかの例を見ることができます:
php > $preFill = 'I m reach';
php > $line = exec('/bin/bash -c \'read -e -p "Check to confirm string: " -i "'.$preFill.'" input; echo $input\'');
Check to confirm string: I m reach
php >
問題は、$preFillに「到着しました」を正しい方法で入れるためにどのエスケープルールを考慮する必要がありますか?
ベストアンサー1
渡されたコードbash
と渡されたコードsh
(php
'sで始まる)へのexec()
参照が必要です。
$preFill = 'I m reach';
$prompt = 'Check to confirm string: ';
$bash_code = 'IFS= read -re -p ' .
escapeshellarg($prompt) .
' -i ' .
escapeshellarg($preFill) .
' input; printf "%s\n" "$input"';
$sh_code = 'exec /bin/bash -c ' . escapeshellarg($bash_code);
$output = exec($sh_code);
echo $output;
君も忘れてたのそしてIFS=
の-r
ためのread
とシェルパラメータ拡張に関する引用、そして覚えておいてくださいecho
任意のデータと一緒に使用することはできません。
両方を実行しsh
てbash
ユーザーにメッセージを表示するのは過度のようです。