2016-07-01 3 views
0

나는 PHP로 처리를 마쳤습니다. 이 프로세스는 인터넷에서 파일을 가져 와서 zip 파일에 저장합니다. 대상 zip 파일은 알고리즘을 기반으로하며 4096 개의 zip 파일이 있습니다. 대상 zip 파일은 처리 된 URL의 해시를 기반으로합니다.zip 파일로의 동시 쓰기

나는 또 다른 프로그램을 실행하여 http 청원서를 작성하므로 스크립트를 동시에 실행할 수 있습니다 (약 110 개의 프로세스).

내 질문에 간단합니다. 쓰레드는 의사 난수 (pseudorandom)이기 때문에 easly 2 개의 쓰레드는 같은 순간에 같은 zip 파일에 파일을 추가 할 수 있습니다.

가능합니까? 2 개의 프로세스가 동시에 파일을 추가하려고하면 파일이 손상됩니까?

파일을 잠그면 가능한 해결책이 될 수 있습니다. 세마포어를 사용하려고 생각했지만 독서, PHP 세마포어는 윈도우에서 작동하지 않습니다.

나는이 가능한 솔루션을 보았다 :이 동시에 2 개 이상의 서로 다른 PHP는 proccesses에서 zip 파일에 파일을 추가 할 수있는 경우

if (!function_exists('sem_get')) { 
function sem_get($key) { return fopen(__FILE__.'.sem.'.$key, 'w+'); } 
function sem_acquire($sem_id) { return flock($sem_id, LOCK_EX); } 
function sem_release($sem_id) { return flock($sem_id, LOCK_UN); } 

}

어쨌든 질문입니다.

감사합니다.

답변

0

짧은 대답 : 아니오! zip 알고리즘은 한 번에 하나의 스트림을 분석하고 압축합니다.

Windows에서는 어렵습니다. Linux에서는 쉽지 않습니다! 나는 고유 한 인덱스를 가진 db 테이블을 생성하고, 그 인덱스 번호를 사용하여 파일 이름을 결정하거나 적어도 파일이 기록되고 있음을 나타내는 플래그를 사용하려고한다.

+0

의견을 보내 주셔서 감사합니다. 내가 게시 한 것과 같은 파일 잠금 솔루션을 사용합니다. – hamboy75