Senario :
각 줄에 문자열 (평균 문장 가치)이있는 파일이 있습니다. 인수의 경우이 파일의 크기가 1Mb (수천 줄)라고 말할 수 있습니다.
파일을 읽고, 문서 내에서 일부 문자열을 변경하고 (일부 추가 및 제거 및 수정) 스크립트를 사용하여 모든 데이터를 새 데이터로 덮어 씁니다.
질문 :
'서버'PHP, OS 또는 httpd 등이 이미 이와 같은 문제를 막을 수있는 시스템을 가지고 있습니까 (읽기 / 쓰기의 절반 정도).
그렇다면 작동 방식을 설명하고 관련 문서에 대한 예 또는 링크를 제공하십시오.
그렇지 않은 경우 쓰기가 완료 될 때까지 파일을 잠그고 이전 스크립트가 쓰기를 마칠 때까지 다른 모든 읽기 및 / 또는 쓰기에 실패하는 등 활성화하거나 설정할 수있는 것이 있습니까?
내 가정 및 기타 정보 :
문제의 서버가 PHP와 Apache 또는 Lighttpd를 실행 중입니다.
한 사용자가 스크립트를 호출하고 파일 쓰기 도중에 중간에 다른 사용자가 해당 순간에 파일을 읽는 경우. 이 문서를 읽은 사용자는 아직 작성되지 않았으므로 전체 문서를받지 못합니다. (이 가정이 잘못되면 저를 정정하십시오)
PHP는 텍스트 파일을 읽고 쓰는 것, 특히 "fopen"/ "fwrite"및 주로 "file_put_contents"함수에만 관심이 있습니다. "file_put_contents"문서를 보았지만 "LOCK_EX"플래그가 무엇인지 또는 무엇인지에 대한 자세한 설명이나 좋은 설명을 찾지 못했습니다.
시나리오는 파일 크기가 크고 데이터가 편집되는 방식으로 인해 이러한 문제가 발생할 가능성이 높다고 가정하는 최악의 시나리오의 예입니다. 나는이 문제에 대해 더 배우고 싶어하고 "mysql 사용"또는 "왜 그렇게하고 있습니까?"와 같은 답변이나 의견을 원하지 않거나 필요로하지 않습니다. PHP를 사용하면 올바른 위치 / 문서를 보지 않는 것 같습니다. 그렇습니다 .PHP는 이러한 방식으로 파일 작업에 완벽한 언어가 아니라는 것을 알고 있습니다.
file_put_contents()
fopen()/fwrite()
춤 의 포장지 일뿐 입니다. LOCKEX
전화하는 것과 같습니다 flock($handle, LOCKEX)
.