2011-01-16 3 views
0

내 서버에 인증을 설정하려고하는데, PHP에 대해 거의 알지 못합니다.PHP : 파일에 텍스트 추가하기

내가 사용자와 암호로 가득 PHP 파일이 수동으로 암호의 배열을 편집하지 않고

function getPassword($user) 
{ 
    // the user/password database. For very small groups 
    // of users, you may just get away with expanding this 
    // array. 
    $passwords= array (
     'user1' => 'password1', 
     'user2' => 'password2', 
     'user3' => 'password3', 
     'user4' => 'password4' 
     ); 
    $password = $passwords[ $user ]; 
    if (NULL == $password) 
     return NULL; 

을, 나는 PHP 파일이 사용자 이름과 암호에 대한 사용자 입력에서 읽고 배열에 추가 할 .

<?php 
function fwrite_stream($fp, $string) { 
    $fp = fopen('shit.php', 'w'); 
    for ($written = 0; $written < strlen($string); $written += $fwrite) { 
     $fwrite = fwrite($fp, substr($string, $written)); 
     if ($fwrite === false) { 
      return $written; 
     } 
    } 
    return $written; 
    fclose($fp); 
} 
?> 

가 어떻게 배열에 쓰는이 말할까요 :

나는 문서를 찾는하여이 작업을 수있는 방법의 막연한 생각을 가지고?

+0

편집 : 사실, 내가 무슨 생각을 나는 잘못하고있다. 아마도 사용해야 할 기능은 다음과 같습니다. http://uk.php.net/manual/en/function.file-put-contents.php – dukevin

+0

일반 텍스트로 암호를 저장하지 말고 암호를 해시로 저장해야합니다 ([ 'crypt'] (예 : http://php.net/crypt). – Gumbo

답변

1

내가 하드 코딩하지 않을과 내용을 얻을 수 (물론, 당신은 탈출 및/또는 사용자 이름/암호에 대한 검증을 적용해야합니다) PHP 스크립트의 사용자 이름과 암호 목록. 내가 대신 디스크 배열을 읽기 위해 이런 짓을 할 것이다 :

// Web server must have read permission for the file, 
// but it should be placed outside of public_html 
// for security reasons. 
$gPasswordFile = '/home/kevin/password.db'; 

// Read the password file's entire contents as a string. 
$contents = file_get_contents($gPasswordFile); 

// Unserialize the file's contents, assuming an empty array 
// if the file does not exist. 
$passwords = $contents ? unserialize($contents) : array(); 

을 디스크에 배열을 쓰는 경우 :

file_put_contents($gPasswordFile, serialize($contents)) or die('Could not save password file!'); 

공용 웹 사이트로 수천 명의 사용자를 가지고 있다면, 시도 된 모든 로그인에 대해 전체 사용자 데이터베이스를로드하는 것은 비효율적입니다. 그런 다음 정보를 저장하기 위해 MySQL과 같은 실제 DBMS를 사용하게 될 것입니다.

(보조 노트로서, 당신이 정말로 암호 파일 손상의 영향을 제한하기 위해 사용자 별 소금으로 암호를 해시해야하지만 또 다른 질문에 대해 그 내용을 저장합니다..)

1

나는 지금하려는 일에 강력히 추천합니다. 암호를 별도의 파일에 저장하고 스크립트에서 읽기/쓰기를 사용하는 것이 어떻습니까? 이런 방식으로 PHP를 조작하면 사용자가 입력 할 수있는 모든 종류의 입력을 염두에 두어야하므로 문제를 묻는 것입니다.

내가 가장 좋은 건 file_put_contents('filename.txt', "\"$username\",\"$password\\n" FILE_APPEND); 생각

그런 다음 $passwords = fgetcsv('filename.txt')