필자는 가끔 php로 편집되는 txt파일이 "", 즉 완전히 초기화되어 백지가 되는 경험을 했다. 소중한 데이터(인기글 데이터)도 날려버렸을 뿐더러 왜 그런지 이유도 몰라서 더 당황스러웠었다.
처음엔 무료 호스팅 사이트라 가끔 이렇게 파일을 지워대는 건가 하고 역시 싼게 비지떡이구나 싶었는데, 그래도 구글에 검색해보니 필자와 같은 사례가 그리 많지 않았다. 왠지 진짜 문제가 다른 데에 숨어있는 것같았다.
그런데
파일을 열고, 읽고, 쓰고, 닫을 때 에러가 발생할 수 있다는 점을 생각해보니 이 에러에 대비하지 않아서 문제가 발생한 거라는 걸 알 수 있었다. fopen, fread, fwrite, fclose는 실패할 경우 false 값을 반환한다.(fclose는 사실 실패해도 웬만한 경우엔 상관 없지만)
그렇다면 php에서 파일이 지워지지 않게 하려면 어떻게 해야 할까? 파일을 다루는 함수가 실패했을 때 그대로 진행하면 예상치 못한 결과를 가져올 수 있고, 특히 w모드의 fwrite는 파일을 열 때 파일을 모두 지워버려 만약 쓰기가 실패하면 데이터가 php에 변수로만 존재하게 돼 매우 위험한 상태가 된다.
필자는 php에 전문적이지 않아 더 좋은 방법도 있겠지만, 필자는 다음과 같은 방법을 사용했다.