2015-01-27 2 views
0

두 번째 텍스트 파일에 결과를 기록하여 하나의 텍스트 파일을 필터링하려고합니다.코드는 루프의 마지막 항목 만 저장합니다.

약간의 코드가 있지만 작동하지 않아 첫 번째 텍스트 파일의 마지막 줄만 별도의 백업 텍스트 파일에 기록합니다.

코드 :

//filter the ingame bans 
$search = "permanently"; 
$logfile = "ban_list.txt"; 
$timestamp = time(); 

// Read from file 
$file = fopen($logfile, "r"); 
while(($line = fgets($file))!= false) 
{ 
    if(stristr($line,$search)) 
    { 
     $cache_ig = "ingamebanlist.txt"; 
     $fh = fopen($cache_ig, 'w') or die("can't open file"); 
     $content = "\n"; 
     fwrite($fh, $content); 
     $content = $line; 
     fwrite($fh, $content); 
     fclose($fh);  
    } 
} 

나는 개인적으로 내 코드에 오류가 표시되지 않습니다, 도와주세요.

기억 : 그것은 작업의 종류 않지만, 그것은 단지 ingamebanlist.txt 파일에 ban_list.txt 파일의 마지막 줄을 씁니다 ...

코드로 어떻게됩니까
+0

Ifyouwouldbothertoindentyourcode, thenitwouldbemuchmorereadable! :-) 들여 쓰기 외에, 당신이 더 명확하게 성취하고자하는 것을 말할 수 있습니까? – FooF

답변

1

는 개방 (사용 쓰기 모드), 쓰기 때문이다 그리고 당신의 루프 내부를 닫아서 마지막 엔트리까지 덮어 쓰기하므로 마지막 항목 만 저장합니다.

당신이 원하는 것은이 같은 루프 밖에서 그것을 가지고하는 것입니다

<?php 
$search = "permanently"; 
$logfile = "ban_list.txt"; 
$cache_ig = "ingamebanlist.txt"; 
$timestamp = time(); 

$read = fopen($logfile, "r") or die("can't read file"); 
$write = fopen($cache_ig, 'w') or die("can't write to file"); 
while(($line = fgets($read)) !== false) 
{ 
    if(stristr($line,$search)) 
    { 
     fwrite($write, $line . "\n"); 
    } 
} 
fclose($write); 
fclose($read); 

대안 솔루션은 fopenw 이후 마음대로 대신 wa을 사용하는 것입니다 : 대한

열기 쓰기 전용; 파일 포인터를 파일의 시작 부분에 놓고 길이가 0 인 파일을 자릅니다. 파일이 없으면 파일을 만듭니다.

동안 a 것이다 : 쓰기 전용

열기; 파일 포인터를 파일의 끝에 놓으십시오. 파일이 없으면 파일을 만듭니다. 당신의 코드로 작동 할 수 있도록 할

은 변경하지만 라인없이 :

$fh = fopen($cache_ig, 'w') or die("can't open file"); 

사람 :

$fh = fopen($cache_ig, 'a') or die("can't open file"); 
관련 문제