그래서 자바 애플리케이션이 파일을 작성해야하는 Samba 파일 서버가 있습니다. 문제는 새로운 파일에 대해 동일한 디렉토리를 적극적으로 가져 오는 또 다른 PHP 응용 프로그램 (PHP 스크립트가 응용 프로그램으로 간주되는 경우)이 있다는 것입니다.미래 파일 잠그기
Java 응용 프로그램에서 디스크에 완전히 기록하기 전에 PHP 스크립트가 파일을 가져 오는 경우가 있습니다. 여기에 아스키 아트의 약간은 내가 현재 가지고있는 시각화하기 위해 (그러나 작동하지 않습니다)입니다 :
Samba 공유
/foo
는
/bar
((내 자바 응용 프로그램은 여기에 파일을 삭제) PHP가 당기는 디렉토리)
내가 현재하고있는 것은 파일이 몇 가지 기준을 충족 할 때 /bar
으로 이동 한 다음 더 많은 처리를 위해 PHP에서 가져온 것입니다. 나는 다른 것을 시도했다. 그러한 파일을 쓰기가 불가능하고 읽을 수 없도록 설정하는 것은 renameTo
을 호출하기 전에했다.
조금 보았는데 FileLock
님께 서 보았지만 향후 파일을 잠글 수없는 것 같습니다. 그래서 저는 여기에 어떤 종류의 가능성이 있는지 궁금합니다. PHP를 만지지 않고 파일을 완전히 작성하기 전에 파일을 잠그지 않고 잠글 수 있습니다. (왜냐하면, 음, PHP이고 지금 당장 수정할 수있는 권리가 없기 때문입니다.)
감사
편집 한 내가 어떤 식 으로든 도움을 줄 수있는 경우 PHP 스크립트가 정말 무엇을하고 있는지에 대한 몇 가지 통찰력을 가지고
.
루프에서 디렉토리 파일을 읽는 중입니다 (잠자기없이 readdir 사용).
"."이외의 파일 이름을 찾으면 바로. 그리고 "..", 그것은 file_get_contents 호출하고 자바 코드도 readdir
와 file_get_contents
사이를 쓸 시간이 없었 수 있으므로 파일을 완전히에도이 디스크에 기록 (또는하지하지 않기 때문에 실패하는 곳이다.
편집 2이 Java 응용 프로그램이 오래된 PHP 스크립트를 대체
. 그들은 그것을 구현 될 때, 그들은 내가 지금 데 같은 문제. 그들은 (file_put_contents
와) /bar/tmp
에 새 파일을 작성하여 그것을 해결을했고, 그런 다음 rename을 사용하여 bar로 이동합니다 (이름이 원자 일 것으로 예상되는 것처럼 보임). 그리고 지금까지 제대로 작동했습니다. t 자바는 PHP가하는 것보다 더 나은 것을 할 수 없다 ...
/foo와/bar가 같은 파일 시스템에 있습니까? – rob
@rob 예, 그렇습니다. – ALOToverflow