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 en ny fil handler 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 igen får jeg en fejl om at filen ikke eksisterer.
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.