Essì, ho sempre schernito chi lo faceva, ed adesso sono costretto ad usare anch'io un contatore di visite basato su file anzichè su db.

L'argomento è ben più difficile di quanto un neofita possa pensare: la gestione corretta della concorrenza con una simile tecnologia è difatti IMPOSSIBILE. Posto questo, come vi pare il seguente codice?

Codice PHP:
<?php

// Semplice funzione di conteggio basata su file (quindi senza gestione corretta della concorrenza).
// [Gli @ sono aggiunti per evitare la visualizzazione degli errori in caso di permessi insufficienti per lo script: in caso di
// "Permission denied", infatti, i soli controlli sull'"if open" non sopprimono la visualizzazione dell'errore a video].
function _my_counter($counterfile)
  {
  
$count 0;

  
// Se il file esiste, lo apro in lettura e ne leggo il contenuto
  
if (file_exists($counterfile))
    {
    
// Se il file esiste ma non è possibile aprirlo in lettura (perchè lockato da un processo in scrittura e/o momentaneamente protetto o bloccato
    // da qualche processo in loop/crash), allora esco e non ritorno nulla: se non lo facessi ritornerei un valore fisso e sbagliato di 1 visita.
    // Infine, trasformo quanto letto in intero - type casting.
    
if (!$fd = @fopen($counterfile,"r")) return false;
      
$count = (int)@fread($fd,@filesize($counterfile));
    @
fclose($fd);
    }

  
// Aggiornamento numero visite (SOLO se il file non esisteva, il conteggio parte da uno)
  
if ($count<1$count=1;
  else 
$count++;

  
// Aggiornamento (scrittura) file
  
if (!$fd = @fopen($counterfile,"w+")) return false;
    @
fwrite($fd,$count);
  @
fclose($fd);

  if (
$count==1) return "Pagina visualizzata [b]".$count."[/b] volta.";
  else if (
$count>1) return "Pagina visualizzata [b]".$count."[/b] volte.";
  else return 
false// Per qualsiasi altro imprecisato motivo
  
}
  
// **************** main

$counterfile "counter_file.log";
echo 
_my_counter($counterfile);
?>
10x a lot