0

Web ページのテキスト フィールドから config.php ファイルを編集できるシステムを作成しましたが、テキスト ボックスにはファイルの内容全体が表示されますが、このような行の一部のみを表示するように制限する方法はありますか?

$paypal_email = "mypaypalemail@gmail.com"; 

そして見せるだけ

mypaypalemail@gmail.com

テキスト ボックス。私のコードはこちら

<?php
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
    foreach ($val as $k => $v) {
        unset($process[$key][$k]);
        if (is_array($v)) {
            $process[$key][stripslashes($k)] = $v;
            $process[] = &$process[$key][stripslashes($k)];
        } else {
            $process[$key][stripslashes($k)] = stripslashes($v);
        }
    }
}
unset($process);
?>
<?php

$file = 'config.php';
// print_r( glob( dirname(__FILE__) . "/*.php"  ) );

$configFile = html_entity_decode(file_get_contents($file), ENT_NOQUOTES);

if ( isset( $_POST["save_button"] ) && $_POST["config_changes"]){
$changes = $path = str_replace("\"", "", $_POST["config_changes"]);
  file_put_contents($file, $_POST["config_changes"]);
}
?>

<html>
  <body>
  <center>
  <b>
  <font face="arial" size="3" color="#000000">
  Welcome edit your Options here
  <br>
    <form method="post" action="controlpanel.php">
      <textarea name="config_changes" rows="30" cols="50"><?php echo $configFile ?></textarea>
      <br>
      <button name="save_button">Save</button>
    </form>
  </body>
</html>
4

1 に答える 1

0

私の最初の考えは正規表現を使用することでしたが、もっと良いものを見つけました。正確には PHP 関数token_get_all()です。

ファイルの内容をその関数に渡します (このデモでは、token_get_all 内のいくつかのサンプル コードをパラメーターとして使用します。ただし、ここで完全なファイルを渡すことができます。

$tokens = token_get_all('<?php $paypal_email = "mypaypalemail@gmail.com"; ?>');

$vars = array();
foreach ($tokens as $token) {
    if ($token[0] == T_CONSTANT_ENCAPSED_STRING) {
        $vars[] = $token[1];
        continue;
    }
}

var_dump($vars);

次のように、そのファイル内のすべての変数を返す必要があります。

array(1) { [0]=> string(25) ""mypaypalemail@gmail.com"" }

これを使用して少しデバッグし、検索している変数がどのインデックスであるかを確認します。その後、指定されたインデックスで変数にアクセスできます。

前述したように、これを何に使用しているのかはわかりませんが、安全ではないようです。別の解決策を探すことを強くお勧めします。

于 2013-04-14T01:29:54.657 に答える