-
-
$fp = fopen("aaa.conf", 'r'); - $configfile = fread($fp, filesize("aaa.conf"));
- fclose($fp);
- //定期的な置換で実行します
- $configfile = preg_replace("/\n[パスワード](.+?)\n/is", "", $configfile);//これは[パスワード] と次の空行の間の内容を一致させるには、 /[パスワード](.+?)\n/is と書くだけですが、この行の前の空行を削除したいので、 Got a n< を追加します。 ;/p>
//ファイルを元の場所に書き戻します
- $fp = fopen("aaa.conf", 'w');
- fwrite($fp, トリム($configfile) );
- fclose($fp);
- //ファイルの最後に新しいパスワード行を 2 行追加します
- $newpassword = "456";
- $filename="aaa.conf";//操作ファイルを定義します
- $fcontent = file( $filename); //file() はファイル全体を配列に読み込みます
- $fp = fopen("$filename","a");
- $str = "nn[password]n$newpassword";
- fwrite( $ fp, $str);
- //by bbs.it-home.org
-
コードをコピー
今日、php Web シェル プログラムのパスワードを変更していましたが、問題が発生しました。パスワードとプログラムは同じファイル内にありますが、プログラムの通常の実行に影響を与えずにシームレスに変更するにはどうすればよいでしょうか?
構成ファイルの形式は次のようなものです。
-
-
- $lines = file("config.php");
- $count =sizeof($lines);
- for($i=0; $i<$count; $i++) {
- $tmp =explode($lines[$i], '=');
- if($tmp==null || sizeof($tmp)!=2)
- continue;
- if(trim($tmp[0 ])=='$manage["user"]'){
- $lines[$i] = $tmp[0]."= ".$manage["user"];
- ブレーク;
- }
- }
- $ str = implode($lines, "rn");
-
コードをコピー
し、$str をファイルに書き戻します
確かに、私のアイデアによれば、コードは次のようになるはずですが、実行すると機能しません。
なぜ半分?正規表現でそれができないかずっと考えていました。
そこで、$manage[''user''] という形式はプログラム内で何度も出現するものではなく、定期的な置換によって変更される可能性があると考えました。
アイデア: すべてのプログラム コードを変数に読み取り、正規表現を使用して文字列内の対応するコンテンツを置き換えます。
コード:
-
-
- //ファイルを開く
- $fp = fopen($manage["file"], 'r');
/ / ファイルを $configfile に読み込みます
- $configfile = fread($fp, filesize($manage["file"]));
- fclose($fp);
// 通常のものに置き換えます式 実行します
- $configfile = preg_replace("/[$]manage["user"]s*=s*["'].*?["']/is", "$manage["user"] = " $ user_name"", $configfile);
- $configfile = preg_replace("/[$]manage["pass"]s*=s*["'].*?["']/is", "$manage[ " pass"] = "$user_pass"", $configfile);
-
- // ファイルを元の場所に書き戻します
- $fp = fopen($manage["file"], 'w');
- fwrite($ fp , trim($configfile));
- fclose($fp);
-
コードをコピー
|