PHP flock
- Dette indlæg indeholder 2 kommentarer, har 2 deltagere og blev senest opdateret af
hausner for 13 år, 11 måneder siden.
-
Emne
-
Her er lige en til programmeringsfolket. Jeg vil gerne lave en funktion i php som åbner to filer. Læser fra den ene og skriver i den anden. I sidste ende skal den fil der bliver skrevet til overskrive den fil der bliver læst fra. Jeg har derfor lavet følgende funktion:
#!/usr/bin/php
< ?php print("Starting.....\n"); $fp_new = fopen("test_new.tmp", "w+"); $fp_old = fopen("test_old.txt", "r"); flock($fp_new,LOCK_EX); print("Sleeping 7 sec..."); sleep(7); fwrite($fp_new, "Writing too file\n"); $cmd = "/usr/bin/sudo -u root rm test_old.txt"; $out = exec($cmd); #unlink("test_old.txt"); $cmd = "/usr/bin/sudo -u root cp test_new.tmp test_old.txt"; $out = exec($cmd); #copy("test_new.tmp","test_old.txt"); #unlink("test_new.tmp"); $cmd = "/usr/bin/sudo -u root rm test_new.tmp"; $out= exec($cmd); flock($fp_new, LOCK_UN); fclose($fp_new); fclose($fp_old); print("Ending.....\n"); ?>Problemet opstår når jeg stresstester funktionen. Det viser sig at filen ganske rigtigt ikke bliver låst op før at jeg beder om det til sidst. Men sletningen af filen ($cmd = “/usr/bin/sudo -u root rm test_new.tmp”;) tager tilsyneladende så lang tid at udføre at et anden fil har nået at få skriverettigheder til den inden at den rent faktisk er væk i filsystemet. Derfor bliver der ikke lavet en ny fil og når der så forsøges at skrive til den får jeg en fejl om at filen ikke eksistere.
Spørgsmål: Hvordan får jeg min php funktion til at vente til kommandoen rent faktisk er udført til fulde.
Jeg håber dette er forklarende nok ellers spørg løs.
Planter er fascinerende
- Du skal være logget ind for at kommentere på dette indlæg.
























