FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Medlem
|
Kod:
if ($fp = @fopen($filename, 'a')) { if (flock($fp, LOCK_EX)) { # testar låset, detta borde inte fungera if (rename($filename, $filename.".old")) { echo "rename fungerade"; } # skriver till filen if (fputcsv($fp, $minarray) === FALSE) { echo "skrivning fungerade inte"; } flock($fp, LOCK_UN); } fclose($fp); } 1) Låset fungerar inte! Jag lyckas flytta filen fastän det inte borde gå. Hur gör jag för att få rename att inte fungera om det finns ett lås? 2) Skrivningen till filen _verkar_ fungera. MEN, när jag kollar i filen så finns inget där. Anledningen är så klart att filen är flyttad. Men varför returnerar inte fputcsv FALSE? |
|||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Banned
|
Ta bort alla @ och se vad den skriver ut...
Citat:
|
||
![]() |
![]() |
![]() |
#3 | |||
|
||||
Medlem
|
Tänk dig att filen är ett utedass.
Flock är nyckeln som hänger på väggen inne i stugan. För att få nyttja dasset tar man nyckeln och går dit. Finns inte nyckeln på väggen är dasset att betraktas som upptaget, och alla vet att då går man inte dit. Oavsett var nyckeln befinner sig kan man jämna dasset med marken med en grävskopa. I manualen står att läsa att flock är "advisory", och det fungerar endast då alla åtkomstförsök görs på samma sätt. Flock är inte lösningen på att skydda filen från att bli omdöpt. |
|||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Medlem
|
så om jag i ett annat program flockar filen innan jag använder rename, kan jag då vara säker på att ingen redan är på dass?
|
|||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Banned
|
wedge skrev ju det!
rename är grävskopan... medans flock är nyckeln i stugan... Sitter någon på dass, medans du kommer med grävskopan, så är bryr sig inte grävskopan om ifall det är tomt på dass eller inte... Den jämnar dasset med marken oavsett vem som är där inne... |
||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Medlem
|
Förmodligen inte. Det kanske kan liknas vid att de nödiga är oerhört korkade, och när nyckeln återvänder springer de ut och sätter sig i den grop som grävskopan efterlämnat.
Flock vill ha en file handle, och det finns inget som hindrar att flera instanser samtidigt kör fopen mot samma fil. De har då redan hunnit med att öppna filen, men inte fått ett "riktigt lås". Det borde gå om du kapslar in hela operationen med ytterligare ett lås som sätts på en dummyfil. Har du beviljats ett exklusivt lås på dummyfilen gör du som du vill med dasset. Filen, menar jag. Öppnar den eller byter namn på den eller whatever. Det blir väl en sorts semaforimplementation, antar jag. |
|||
![]() |
![]() |
![]() |
#7 | |||
|
||||
Medlem
|
Jo jag förstod det. Det jag tänkte var att jag därför kan använda flock innan jag renemar. då borde jag vara säker på att ingen annan skriver till filen samtidigt. eller?
Kod:
if ($fp = @fopen($filename, 'a')) { if (flock($fp, LOCK_EX)) { if (rename($filename, $filename.".old")) { echo "denna rename fungerade och jag är nu säker på att ingen annan skrev till filen samtidigt"; } echo "släpper låset"; flock($fp, LOCK_UN); } fclose($fp); } |
|||
![]() |
![]() |
Svara |
|
|