6

解決策を探してみましたが、決定的なものは見つかりませんでした。

基本的に、ユーザー名とパスワードをリストした txt ファイルがあります。特定のユーザーのパスワードを変更できるようにしたい。

users.txt ファイルの内容:

user1,pass1
user2,pass2
user3,pass3

次のphpコードを試しました:

            // $username = look for this user (no help required)
            // $userpwd  = new password to be set 

    $myFile = "./users.txt";
    $fh = fopen($myFile,'r+');

    while(!feof($fh)) {
        $users = explode(',',fgets($fh));
        if ($users[0] == $username) {
            $users[1]=$userpwd;
            fwrite($fh,"$users[0],$users[1]");
        }
    }       

    fclose($fh);    
4

5 に答える 5

8

これはうまくいくはずです!:)

$file = "./users.txt";
$fh = fopen($file,'r+');

// string to put username and passwords
$users = '';

while(!feof($fh)) {

    $user = explode(',',fgets($fh));

    // take-off old "\r\n"
    $username = trim($user[0]);
    $password = trim($user[1]);

    // check for empty indexes
    if (!empty($username) AND !empty($password)) {
        if ($username == 'mahdi') {
            $password = 'okay';
        }

        $users .= $username . ',' . $password;
        $users .= "\r\n";
     }
}

// using file_put_contents() instead of fwrite()
file_put_contents('./users.txt', $users);

fclose($fh); 
于 2012-09-19T07:57:50.590 に答える
2

そのファイルを取得したら、file_get_contentsを使用し、その後、特定のユーザー名にpreg_replaceを使用すると思います。

私は過去にこれをここのようなことをしました

               $str = "";

       $reorder_file = FILE_PATH;
       $filecheck = isFileExists($reorder_file);

       if($filecheck != "")
        {
            $reorder_file = $filecheck;
        }
        else
        {
            errorLog("$reorder_file :".FILE_NOT_FOUND);
            $error = true;
            $reorder_file = "";
        }
        if($reorder_file!= "")
        {
            $wishlistbuttonhtml="YOUR PASSWORD WHICH YOU WANT TO REPLACE"
            $somecontent = $wishlistbuttonhtml;
            $Handle = fopen($reorder_file, 'c+');
            $bodytag = file_get_contents($reorder_file);
            $str=$bodytag;
            $pattern = '/(YOUR_REGEX_WILL_GO_HERE_FOR_REPLACING_PWD)/i';
            $replacement = $somecontent;
            $content = preg_replace($pattern, $replacement, $str,-1, $count);
            fwrite($Handle, $content); 
            fclose($Handle);
        }   

お役に立てれば....

于 2012-09-19T05:48:14.357 に答える
1

これを行う適切な方法は、代わりにデータベースを使用することです。データベースはランダム アクセスを簡単に実行できますが、テキスト ファイルではそうではありません。

なんらかの理由でデータベースに切り替えることができず、システムに約 1000 人以上のユーザーがいるとは思わない場合は、ファイル全体を読み込んで PHP に変換する方がはるかに簡単です。データ構造を確認し、必要な変更を行い、テキストに変換して元のファイルを上書きします。

この場合、file() は、各要素がユーザー名でありパスワードが文字列である配列にテキスト ファイルをロードし、配列のすべての要素をカンマで分解してユーザー名とパスワードを個別に取得し、変更を加えることを意味します。変更したデータをディスクに書き込む必要があります。

fgetcsv() がデータの読み取りに役立つ場合もあります。SplFileObject を使用していて、最新バージョンの PHP を使用している場合は、fputcsv() を使用してデータを書き戻すこともできます。

ただし、データベースを使用するだけの方がはるかに優れたソリューションです。仕事に適したツール。

于 2012-09-19T05:54:39.257 に答える
0

sed*nix システムを使用している場合は、 ;を使用できます。ファイルハンドルなどで遊ぶよりもきれいだと思います:

exec("sed -i '/^$username,.\+\$/$username,$userpwd/g' ./users.txt 2>&1", $output, $return);

そうでない場合は、GordonM に同意し、ファイルを解析して PHP データ構造にし、操作してから元に戻します。

$data = file_get_contents('./users.txt');

$users = array_map(function($line) {
  return explode(',', $line);
}, explode("\n", $data));

foreach ( $users as $i => $user ) {
  if ( $user[0] == $username ) {
    $user[1] = $userpwd;
    $users[$i] = $user;
  }
}

file_put_contents('./users.txt', implode("\n", array_map(function($line) {
  return implode(',', $line);
}, $users)));

もちろん、それを行う方法は無数にあります!

于 2012-09-19T07:23:20.610 に答える