He estado probando desde consola ejecutando la aplicación concurrentemente y sigue fallando. Pero he visto un ejemplo en donde bloquean un fichero auxiliar y haciendolo así funciona a la perfección. Previamente tendrás que crear el fichero lock.tmp (o el nombre que quieras, si están en linux puedes poner .lock como nombre de fichero y así queda como fichero oculto) porque si no da error. No sé explicarte por qué funciona pero el hecho es que lo hace
Código PHP:
<?
$archivo = "index.txt";
$lock = "lock.tmp";
$lock_fp = fopen($lock, "r");
flock($lock_fp, LOCK_EX);
$abre = fopen($archivo, "r");
$total = fread($abre, filesize($archivo));
fclose($abre);
$abre = fopen($archivo, "w");
$total = $total + 1;
fwrite($abre, $total);
fclose($abre);
flock($lock_fp, LOCK_UN);
echo $total;
?>