2012-06-28 4 views
1

XML 문서를 열고 DOM을 가져 와서 수정 한 다음 원본 문서를 덮어 쓰는 PHP 스크립트가 있습니다.
PHP 호출은 비동기식으로 이루어 지므로 여러 사용자가 동시에 문서에 액세스 한 다음 두 번째 저장시 첫 번째 항목을 덮어 쓰면서 저장할 수 있습니다.
나는이 사실을 알 필요가 없습니다. flock()은 현재 프로세스에만 적용되므로 사용할 수 없으므로 어떻게해야합니까?PHP 대기열에 여러 스크립트 호출

답변

3

, 무리() 하지는 현재 프로세스에 적용하지 :

http://php.net/manual/en/function.flock.php 

그것은 당신이 부하를 사용하는 경우 문제가 될 수 있지만 로컬 파일 시스템을 사용 않습니다 - 균형 잡힌 웹 서버. 또한 flock이 작동하려면 파일을 "경쟁"할 수있는 다른 프로세스도 flock을 사용하고 있는지 확인해야합니다. 그렇지 않으면 프로세스가 서로 "단계를 밟습니다".

+0

[이 질문에 대한 flock() timeouts] (http://stackoverflow.com/q/11212661/1072112) 또한 흥미 롭습니다. – ghoti

+0

허. 다른 프로세스와 관련해서는 W3이 말한 것이 아닙니다. (www.w3schools.com/php/func_filesystem_flock.asp). 비록 정보가 다소 오래된 것 같지만. 어쨌든 매뉴얼에있는 flock() 페이지에는 잠글 때 파일 핸들이 필요하다는 언급이 있습니다. 그래서 DOM을 사용하고 있었기 때문에 파일 핸들이 필요 없습니다. 그래서 PHP 스크립트 인 xml.lock이라는 파일을 만들었습니다. XML 파일에 액세스하기 전에 열리고 잠겨 있습니다. 그것은 완벽하게 작동했습니다. – err1100

-1

파일을 잠급니다.

xml이 다른 프로세스에서 열리고 있음을 나타 내기 위해 빈 파일 (예 : xml.lock)을 만듭니다. xml을 수정 한 후에 빈 파일을 제거하십시오.

사실
+0

원래 XML 문서를 모으는 것보다이 방법이 더 좋습니까? 그리고 두 경쟁 프로세스가'xml.lock'이 존재하는지, 둘 다 파일을 보지 않는지를 확인하는 경쟁 조건을 처리하는 방법은 무엇입니까? – ghoti

관련 문제