2014-04-14 4 views
0

내 PHP 스크립트에서 문자열을 구문 분석 한 후 파일에 데이터를 작성해야합니다 (존재하지 않는 경우 파일을 만든 후). 파일을 쓰기 전에 문제를 피하기 위해 배타적 잠금이 필요합니다. 이것은 내 코드입니다.php : 파일에 대한 독점적 인 잠금을 얻지 못했습니다

foreach ($elements[0] as $current) { 
    $file_handler = fopen($my_folder . "/" . $current . ".txt", "a"); 
    $locked = flock($file_handler, "LOCK_EX"); 
    while (!$locked) { 
     usleep(500000); 
     $locked = flock($file_handler, "LOCK_EX"); 
    } 
    //got lock 
    fwrite($file_handler, $mystring . "\n"); 
    //release lock 
    flock($file_handler, LOCK_UN); 
    fclose($file_handler); 
} 
return; 

이제 뭔가가 작동하지 않는 것 같습니다. fopen 파일을 만들지 만 내 코드가 루프 내부에있는 것처럼 보입니다 (파일이 생성되었지만 내부에 아무 것도 쓰지 않았습니다). 뭐가 문제 야?

+0

나는이 문제를 방지하기 위해 데이터베이스를 사용하는 것이 좋습니다. – dlyaza

+0

DB를 저장할 수없는 많은 양의 데이터를 저장해야하기 때문에 db를 사용할 수 없습니다 (데이터가 작은 경우 데이터베이스가 괜찮을 수도 있음) 편집 : 스크립트를 호출 할 때 나는 유일한 스크립트입니다. 하나의 파일에 자물쇠를 묻는 사람 – giozh

답변

2

잠금 용 인수를 상수 대신 문자열로 전달합니다.

시도 :

$locked = flock($file_handler, LOCK_EX); 

공지 사항 누락 된 큰 따옴표는 약 LOCK_EX

+0

네, 그게, 고마워. – giozh