2012-03-19 6 views
0

blueimp.net의 AjaxChat에 대한 매우 기본적인 등록 모듈을 작성하려고합니다. 사용자 구성 파일에 쓰는 스크립트가 있습니다.fseek를 사용하여 마지막 줄 앞에 문자열 삽입

$userfile = "lib/data/users.php"; 
$fh = fopen($userfile, 'a'); 
$addUser = "string_for_new_user"; 
fwrite($fh, $addUser); 
fclose($fh); 

하지만 난이 사용 fseek과를 달성 할 방법 ?>

있는 매우 마지막 줄, 이전 $addUser를 삽입 할 필요?

답변

2

당신은 항상 파일이로 끝나는 것을 알고있다>와 아무것도, 당신은 할 수있는 경우 :

$userfile = "lib/data/users.php"; 
$fh = fopen($userfile, 'r+'); 
$addUser = "string_for_new_user\n?>"; 
fseek($fh, -2, SEEK_END); 
fwrite($fh, $addUser); 
fclose($fh); 

더 답을 강화하지 않으려면 :이 모드 r+에서 파일을 열고 자하는거야 following notefseek에 대한 이유는

참고 :

append (a 또는 a +) 모드로 파일을 연 경우 위치에 관계없이 파일에 쓰는 모든 데이터가 항상 추가되며 fseek()를 호출 한 결과는 정의되지 않습니다.

fseek($fh, -2, SEEK_END) 파일의 마지막 위치를 배치하고이 PHP의로 SplFileObject class (로모를 사용 달성하는 2 바이트 (?>의 길이)

0

다른 방법에 의해 뒤쪽으로 이동 5.1).

$userfile = "lib/data/users.php"; 
$addUser = "\nstring_for_new_user\n"; 
$line_count = 0; 

// Open the file for writing 
$file = new SplFileObject($userfile, "w"); 

// Find out number of lines in file 
while ($file->valid()) { 
    $line_count++; 
    $file->next(); 
} 

// Jump to second to last line 
$file->seek($line_count - 1); 

// Write data 
$file->fwrite($add_user); 

나는 이것을 테스트 해 보지 않았다 (I 컴퓨터에 내가 지금 사용하고 수 없습니다) 그래서 정확히 그런 식으로 작동하는지 잘 모르겠어요. 여기서 중요한 점은 실제로 fseek()가 바이트 단위로 찾는 방법보다는 라인 단위로 찾을 수있는 SplFileObject의 멋진 seek() 메소드입니다.

관련 문제