私はこのコマンドを持っています
echo "<?php $x=$_GET['x']; echo $x;?>" > x.php
出力ファイルx.phpは次のようになります。
<?php =['x']; echo ;?>
これは$変数に関連していますか? xファイルから正しいPHPコードを取得するには、???をどのように避けるべきですか?
答え1
あなたのコード:
echo "<?php $x=$_GET['x']; echo $x;?>" > x.php
渡された文字列はecho
二重引用符で囲まれているため、シェルはその中のすべてのシェル変数を拡張しようとします。文字列には$x
(2回)と呼ばれる2つの変数が含まれています$_GET
。これらの変数に割り当てられた値がない場合は、空の文字列に置き換えられます。
文字列をそのままファイルに印刷するには、次のようにします。
echo '<?php $x=$_GET['"'"'x'"'"']; echo $x;?>' >x.php
ここに文字列を入れました。一つ引用符。これにより、シェルがシェル変数のように見えるものを拡張しようとするのを防ぎます。
一重引用符で囲まれた文字列に一重引用符を含めることはできないため、一重引用符は特別な方法で追加する必要があります。私は"'"
文字列の残りの部分に関連付けて(二重引用符一重引用符)として追加することにしました。
または、$
文字列の各要素をエスケープします。
echo "<?php \$x=\$_GET['x']; echo \$x;?>" >x.php
3番目の方法は、ここで参照されている文書を使用することです。
cat <<'PHP_END' >x.php
<?php $x=$_GET['x']; echo $x;?>
PHP_END
これにより、シェルが文字列を正しく処理するために実際の文字列を変更する必要がなくなり、echo
挿入したい場合は、一部のシェル実装がCスタイルのエスケープシーケンスなどを使用して他の操作を実行できることを覚えておく必要はありません。 PHPコードに追加してください)