Dein Problem liegt zwischen hier:
fclose(FILE);
$tmp[0]++;
#write counter.dat file back
und hier:
fopen(FILE, ">counter.dat");
in dieser Zeit ist die Datei geschlossen und kann von einem anderen Prozess erneut geöffnet werden.
Du musst die Datei zum lesen und schreiben öffnen, dann Wert lesen, Wert erneuern, Wert schreiben (du musst dann aber den Dateizeiger mit seek neu setzen) und dann erst schliessen.
Struppi.