2012-06-17 3 views
0

나는 PHP를 배우는 데 새로운 사람이고 passwd와 사용자가 배열 된 로그인 기능을 갖춘 기본 PHP 웹 사이트를 만들고 싶었다.PHP에서 파일의 각 줄을 어떻게 읽습니까?

내 생각은 다음과 같이 목록 매개 변수로 사용자 이름을 저장하고 내용과 passwd 파일을하는 것입니다 :

arr = array(username => passwd, user => passwd); 

지금 내 문제는 내가 파일에서 읽을 수있는 방법을 모르는 것입니다 (data.txt) 배열에 추가 할 수 있습니다.

data.txt sample: 
username passwd 
anotherUSer passwd 

나는 fopen 사용하여 파일을 열고 $data에 저장했습니다.

+3

필요에 따라 파일의 내용. – Norse

+0

@Norse가 권고 한 것의 위에, 이것은 쉽게 검색 될 수 있습니다. 'file_get_contents'와'split'은 당신을 위해 그것을 할 것입니다. – Qix

+0

@Norse 나는 평범한 텍스트에 민감한 정보를 저장해서는 안된다는 것을 알고있다. 그러나 이것은 나의 첫 번째 진짜 PHP 프로그램이며, 너무 복잡하다는 점을 배우지 못한다. 이것이 언젠가 진짜 웹 사이트가 될 것이라면 나는 물론 암호화를 추가 할 것이다. – Alvar

답변

3

당신은 file() 기능을 사용할 수 있습니다.

foreach(file("data.txt") as $line) { 
    // do stuff here 
} 
+0

이것은이 간단한 운동을 위해 사용해야하는 가장 단순한 해결책과 같습니다. 감사! :) – Alvar

0

이뿐만 아니라 매우 큰 파일을 작동합니다

$handle = @fopen("data.txt", "r"); 
if ($handle) { 
    while (!feof($handle)) { 
     $line = stream_get_line($handle, 1000000, "\n"); 
     //Do Stuff Here. 
    } 
fclose($handle); 
} 
4

이 PHP 예 수정 (첫번째 공식 PHP 사이트에서 촬영을 ... 항상 체크!) :

$handle = @fopen("/path/to/yourfile.txt", "r"); 
if ($handle) { 
    while (($buffer = fgets($handle, 4096)) !== false) { 
     echo $buffer; 
    } 
    if (!feof($handle)) { 
     echo "Error: unexpected fgets() fail\n"; 
    } 
    fclose($handle); 
} 

에 :

$lines = array(); 
$handle = @fopen("/path/to/yourfile.txt", "r"); 
if ($handle) { 
    while (($buffer = fgets($handle, 4096)) !== false) { 
     lines[] = $buffer; 
    } 
    if (!feof($handle)) { 
     echo "Error: unexpected fgets() fail\n"; 
    } 
    fclose($handle); 
} 

// add code to loop through $lines array and do the math... 

당신이해야하는주의 또한 암호화되지 않은 텍스트 파일에 로그인 세부 정보를 저장하지 않으므로이 방법은 심각한 보안 문제가 있습니다. PHP를 처음 사용하는 사람이라면 가장 좋은 방법은 DB에 저장하고 MD5 또는 SHA1과 같은 알고리즘을 사용하여 암호를 암호화하는 것입니다.

+0

물론 암호를 암호화하는 것이 가장 좋습니다. 그러나 이것은 학습을위한 것이기 때문에 ** REAL ** 웹 사이트에 이것을 사용하지 않을 것이므로 문제가되지 않습니다. – Alvar

+0

그와 같은 작은 작업을 수행하기에는 너무 복잡해 보이는 예제를 결코 이해하지 못했습니다. – Alvar

+0

@Alvar 실제로 많은 언어에서 아주 일반적인 접근법입니다. 파일을 열고 핸들 (pointer, more or less)을 가져 와서 점차적으로 전진하면서 그것을 읽고 찾는다. 다른 사용자가 지적한 이점은 매우 큰 파일을 처리 할 수 ​​있다는 것입니다. 'file()'을 사용하는 사용자의 대답으로 충분할 수 있습니다. – Cranio

1

민감한 정보는 일반 텍스트로 저장하지 말고 대답해야합니다 귀하의 질문에,

$txt_file = file_get_contents('data.txt'); //Get the file 
$rows = explode("\n", $txt_file); //Split the file by each line 

foreach ($rows as $row) { 
    $users = explode(" ", $row); //Split the line by a space, which is the seperator between username and password 
    $username = $users[0]; 
    $password = $users[1]; 
} 

Take a look at this thread.

0

을 사용하여 파일() 또는 file_get_contents()는 배열 또는 문자열 중 하나를 만들 수 있습니다.

과정 당신은 일반 텍스트와 같은 민감한 정보를 저장하지 말아야

// Put everything in the file in an array 
$aArray = file('file.txt', FILE_IGNORE_NEW_LINES); 

// Iterate throug the array 
foreach ($aArray as $sLine) { 

    // split username an password 
    $aData = explode(" ", $sLine); 

    // Do something with the username and password 
    $sName = $aData[0]; 
    $sPass = $aData[1]; 
} 
관련 문제