echo は空の変数 $ を返します。

echo は空の変数 $ を返します。

私はこのコマンドを持っています

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コードに追加してください)

関連情報