예는 수 개념을하지만, 다른 길이의 컨텐츠와 컨텐츠를 교체하는 경우가 어려울 것이다.
fgets
및 fprintf
은 파일 포인터로 작업합니다. 포인터는 기본적으로 파일에있는 위치입니다. fgets
과 fprintf
을 모두 사용하면 해당 포인터가 앞으로 나아갑니다.
First line
>Second line
Third line
: 당신이 포인터를 라인을 읽고 이동 첫 번째 fgets
를 실행 다음
>First line
Second line
Third line
:이 열린 직후 짧은 파일의이 표현을 (>
포인터입니다) 고려 이제 파일에 쓰려고하면 포인터가있는 위치를 씁니다. 내용을 덮어 씁니다. 포인터가에 있는지
가
First line
Foobar> line
Third line
참고 : 그래서,이 결과가 될 것입니다 당신이 "첫 번째 줄"을 "는 foobar"를 변경하고 (코드에서와 같은) fgets
호출 다음 즉시 작성하려고 말 라인의 중간. 당신이 fprintf
를 사용하기 전에 그러나 포인터를 되감기 경우, 올바른 장소에
인쇄됩니다 :
교체 라인이 원본과 크기가 다를 경우 것 같은이, 작동하지 않습니다
<?php
$fp = fopen('text', 'rw');
while (!feof($fp)) {
$line = fgets($fp);
fseek($fp, -strlen($line), SEEK_CUR);
// length has to be identical to string you replaced
$line = "FoobarLine";
fprintf($fp,$line);
}
fclose($fp);
?>
주 그렇지 않아야하는 데이터를 덮어 쓰거나 잘못된 위치에서 읽기 시작할 수 있습니다.
더 나은 솔루션은 다음과 같습니다
- 파일이 충분히 작은 경우;
file
을 사용하여 줄 단위로로드하고 배열을 원하는대로 수정 한 후 file_put_contents(implode("\n", $array)
을 사용하여 덮어 씁니다.
- 임시 파일을 사용하기 만하면됩니다. 별로 중요하지 않습니다.
전혀 읽지 않는 이유는 무엇입니까? 질문에 아무런 의미가 없습니다. –
음. 내 가난한 영어에 대한 미안. 나는 명확하게 설명 할 수 없다. 그러나. 나는 tmp 파일을 훔친 파일을 바꾸고 싶다. – freddiefujiwara
왜 tmp 파일에서 악의적입니까? 왜 그걸 피하려고하는거야? –