2015-10-30 2 views
0

Я пишу скрипт PHP, который обновляет файл .htpasswd (да, я знаю, что он не очень безопасен, но у меня есть несколько защит, чтобы люди не могли получить доступ к скрипту).Удаление неизвестной части строки PHP

Прямо сейчас, я просто добавление текущего файла, так:

$user = ''; // (Not an empty strings just removed the part that grabs this for security reasons) 
    $password = ''; // (Not an empty strings just removed the part that grabs this for security reasons) 
    $password = crypt($password, base64_encode($password)); 
    $line = $user . ':' . $password; 
    $fh = fopen('path/to/password/file','a'); 
    fwrite($fh,$line); 
    fclose($fh); 

Однако, я хотел бы, чтобы удалить текущую запись на этом человеке. Если бы я знал, что их старый пароль был, например pass123, я бы просто использовал str_replace($user . ':' . 'pass123','',$currentfiledata), но я этого не делаю, и у меня нет способа его сохранить.

Как бы я мог это сделать? Я предполагаю использовать preg_replace или что-то подобное, но я не испытываю этого.

+3

Sidenote: Не только это, но и многое другое работает с использованием текстового файла. Какую специальную причину вы не используете для этой базы данных? (намного более управляемый) * Просто любопытно *. –

+0

@ Fred-ii- Я разрабатываю то, что будет регулярно передаваться из домена в другой, и я не могу использовать базу данных для этого. Я шифрую вещи в текстовые файлы с ключами, которые я меняю каждый день. Я знаю, что это не очень безопасно, но это лучшее, что я могу сделать. – RafDev

+3

Рассматривали ли вы использование SQLite? – Mike

ответ

1

Это не разумный способ обновления паролей. Но, поскольку вы уже знаете это, я не буду читать вам лекции о проблемах безопасности.

Если вы должны сделать это таким образом, вы можете выполнить замену с использованием preg_replace(), как показано ниже:

$currentfiledata = preg_replace('~^'.$user.':.*~m', '', $currentfiledata); 

Вышеуказанные поиски выписки по любой строке, которая начинается с (утверждается анкера ^) данная имя пользователя, за которым следует двоеточие, а затем пароль (указанный здесь .* здесь - означает любой символ, повторяющийся ноль или более раз). Матчи заменяются пустой строкой.

+0

Почему модификатор 'm'? – AbraCadaver

+0

@AbraCadaver: Умм, чтобы анкеры работали многострочно? Или вам это не нужно? –

+0

Nevermind, я думал об этом не так :-( – AbraCadaver

Смежные вопросы