sadece alt dize doğruysa php bir dize doğrulayarak

3 Cevap php

User1 doğru olmalıdır dize olup olmadığını nasıl bir alt doğrulamak örneğin PHP doğrudur?

Textfile:

user1: pass1

user2: pass2

kullanıcı3: 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 Cevap

Ben hata veya kötüye eğilimli olduğu gibi kimlik doğrulama sisteminin bu tür karşı tavsiye ediyorum. Diğer ACL benzeri sistem ve veritabanı kullanıcı / parola hash kontrolünü kullanın.

Yukarıdaki bu söylediğimiz gibi, bu kadar kullanıcı doğrulama gider gibi iyi bir yaklaşım değildir. Eğer temel bir şey istiyorsan, HTTP Authentication ya da en azından bir şey kullanarak bakmak.

O dedi, sen PHP's file function, örneğin kullanarak sorular var ne yapabilirim

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';
}

Bu her satırı formu "adı: şifre" değildir varsayar başka hiçbir şey; Eğer biçimine bağlı olarak çizgiler maç tam olarak nasıl ayarlamanız gerekebilir. Bu tarafından onaylanmış olacak bir örnek dosya gibi bir çizgi olurdu

foo:bar

Kimlik doğrulama için bu kullanıyorsanız; kullanıcıların uğruna farklı (daha güvenli) bir yaklaşım düşünün. Arada OP cevap amaçlanan olarak görünüyor, sadece PHP kodu hakkında hiçbir şey işe yarayacağını doğrudur.

Ancak, fikir yapılandırma (dünya görmek için temelde,) siz (parse_ini_file kullanabilirsiniz korunması gerekmez ayarları) ve arkadaşlarını aramak için anahtar $ arr ['key'] bir dizinin değerini kullanmak için ise . Yine: Bu gerçekten hassas veriler için iyi bir fikir değildir.

EDIT: Ayrıca, muhtemelen yerine "\ r \ n" varsayarak daha sonu hat karakterler için PHP_EOL sabitini kullanmak iyi bir fikirdir.