проверка строки в php, если верна только подстрока - PullRequest
0 голосов
/ 06 апреля 2010

Как проверить правильность подстроки в PHP, например, если user1 находится в строке, это должно быть true?

текстовый файл:

пользователь1: пароль1

user2: pass2

user3: pass3

if(in_array($_SERVER['user1'] . "\r\n", $textfile)){ //not the way want this to be true
  printf("Ok user1 is in this row somewhere");
}

Ответы [ 3 ]

1 голос
/ 06 апреля 2010

Как уже говорилось выше, это не очень хороший подход к аутентификации пользователей. Если вы хотите что-то простое, посмотрите на HTTP-аутентификацию или что-то еще.

Тем не менее, вы можете сделать то, что вы просили, используя PHP file function , например

function validUser($file, $user, $pass) {
  // Check file exists
  if (!is_file($file)) {
    return FALSE;
  }

  // Read file
  $lines = file($file);
  if ($lines === FALSE) {
    return FALSE;
  }

  // Go over the lines and check each one
  foreach ($lines as $line) {
    list($fuser, $fpass) = explode(':', trim($line));
    if ($user == $fuser && $pass == $fpass) {
      return TRUE;
    }
  }

  // No user found
  return FALSE;
}

if (validUser('passwords.txt', 'foo', 'bar')) {
  echo 'The user was found';
}

Обратите внимание, что здесь предполагается, что каждая строка имеет форму «имя пользователя: пароль» и ничего более; вам может потребоваться настроить точно, как вы соответствуете ваши строки в зависимости от вашего формата. Файл примера, который будет проверен этим, будет иметь такую ​​строку, как

foo:bar
1 голос
/ 06 апреля 2010

Я бы посоветовал против такого рода системы аутентификации, так как подвержен ошибкам или злоупотреблениям. Используйте другую систему, такую ​​как ACL или проверка хеша пользователя / пароля базы данных.

0 голосов
/ 06 апреля 2010

Если вы используете это для аутентификации; ради ваших пользователей рассмотрите другой (более безопасный) подход. Между прочим, ответ на OP является правильным, что почти ничего в этом коде PHP не будет работать так, как кажется.

Однако, если идея состоит в том, чтобы использовать значение массива по ключу $ arr ['key'], чтобы найти параметры конфигурации, которые не нужно защищать (в общем, чтобы увидеть мир), вы можете использовать parse_ini_file ) и друзья. Опять же: это не очень хорошая идея для действительно конфиденциальных данных.

РЕДАКТИРОВАТЬ: Кроме того, это, вероятно, хорошая идея использовать константу PHP_EOL для символов конца строки, а не предполагать "\ r \ n".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...