Ciao a tutti.
Ho una pagina php il cui codice è decisamente lungo da postare e sarebbe di difficile comprensione.
Provo quindi a spiegarvi prima cosa deve fare questa pagina e il problema che riscontro:
la pagina legge un file di testo ed 'explode' tutte le righe ( $ind= explode("\n",$testo[1])
Queste poi vengono visualizzate in una tabella.
Fino a qui nessun problema.
A fondo pagina c'è un pulsante che rimanda alla pagina stessa per ordinare alfabeticamente le righe del file.
Il codice inizia con un if(isset($_POST['ordina'])){....}
Dopo questa condizione viene semplicemente letto il file come spiegato sopra.
All'interno delle graffe invece vengono lette le righe del file, riscritte in un vettore (array), il vettore viene ordinato (sort) ed infine il file di testo viene riscritto con le righe ordinate.
Questa operazione viene eseguita correttamente (il file viene riscritto nel modo corretto), il problema è che dopo aver eseguito queste operazioni il codice dovrebbe proseguire normalmente e stampare a video la nuova tabella ordinata.
Vengono però mostrate solo un numero inferiore di righe.
Se poi mando nuovamente in esecuzione la pagina il file viene letto tutto e mostrato correttamente ordinato.
I vari cicli di lettura/scrittura hanno tutti nomi di variabili (contatore) differenti quindi il problema è da trovare da altre parti.

Sembra quasi che il programma inizi a leggere il file e visualizzarlo prima che sia finita la fase di scrittura dello stesso (cosa che penso sia impossibile!)

Ora posto il codice completo sperando che qualcuno sia in grado di aiutarmi... :
codice:
$indice = 'wip_indice';$file1 =  $indice.'.txt';
if(!file_exists($file1)){  
    echo"### ATTENZIONE: il file <b>".$file1."</b> non è stato trovato ###";
    die;  
}  
    
//------------------------------------------------------------------------
//rigenerazione file
//------------------------------------------------------------------------


if(isset($_POST['rigenera'])){


    $var=fopen($file1,"r");
    $leggi=fread($var,filesize($file1));
    $sss=nl2br($leggi);
    fclose($var);


    $vettore_indice =array();
    $count=0;
    $testo = explode("<ind>", $sss);
    $ind= explode("\n",$testo[1]);
    $righex=count($ind);
    for($n = 1; $n < $righex-1; $n++){
        $colonna= explode("[[",$ind[$n]);
        $vettore_indice[]=array('voce' =>$colonna[0], 'file' => $colonna[1],'tipo' => $colonna[2],'note' => $colonna[3]);    
    }


    foreach ($vettore_indice as $type) {
            $count+= count($type);
    }
    $count= $count/4;


    if($count > 0){


        foreach ($vettore_indice as $key => $row) {
            $voce[$key] = $row['voce'];
            $file[$key] = $row['file'];
            $tipo[$key] = $row['tipo'];
            $note[$key] = $row['note'];
        }
    }


    if($count > 4){
        array_multisort($voce, SORT_ASC,$file, SORT_ASC,$tipo, SORT_ASC,$note, SORT_ASC, $vettore_indice);
    }


    $apro=fopen($file1,"w");
    fclose($apro);
    $apro=fopen($file1,"a");
    $x="<ind>";
    fwrite($apro,$x."\r\n");
    for($n = 0; $n < $count; $n++){
        $stringa=$voce[$n].'[['.$file[$n].'[['.$tipo[$n].'[['.strip_tags($note[$n]);
        fwrite($apro,$stringa."\r\n");
    }
    fwrite($apro,$x);
    fclose($apro);


    echo'<br><br>Il file indice.txt è stato appena rigenerato!<br>';








}


//-------------------------------------------------------------------------




    $var1=fopen($file1,"r");
    $leggi1=fread($var1,filesize($file1));
    $sssx=nl2br($leggi1);
    fclose($var1);




$ck = strpos($sssx,'<ind>');


if(!($ck === false)) {


        $dati0 = array();
        $dati1 = array();
        $dati2 = array();
        $dati3 = array();


        $testox = explode("<ind>", $sssx);
        $indx= explode("\n",$testox[1]);
        $righey=count($indx);


        for($n = 1; $n < $righey-1; $n++){


            $colonna= explode("[[",$indx[$n]);


            if(empty($colonna[1])){
                $colonna1 = strip_tags($colonna[0]);
            }
            else{
                $colonna1 = strip_tags($colonna[1]);
            }


        $colonna_file=$colonna1.'.txt';
        $check_file='voci/'.$colonna1.'.txt';


        if(!file_exists($check_file)){  
            $messaggio .="# il link alla voce <b>".$colonna1."</b> non è stato trovato!<br>";
        }  




        if(isset($colonna[2])){


            switch ($colonna[2]) {
                    case '':
                    $colonna2='';
                        break;
                case 'r':
                    $colonna2=$colonna[2];
                    $colonna1=$colonna1.'&red='.$colonna[0];
                        break;
                case 'd':
                        $colonna2=$colonna[2];
                    $colonna1=$colonna1.'&dis=1';
                        break;
            }
        }
            $dati0[]=$colonna[0];
            $dati1[]=$colonna1;
            $dati2[]=$colonna2;
            $dati3[]=$colonna_file;
        }


        salta_pagina($righey-1, DDP, 'pag.', 4);


        echo'<table border="1" cellpadding="1" cellspacing="0" frame="void" rules=none" WIDTH="100%">';
        echo'<tr><td><b>voci</b></td><td><b>file.txt</b></td><td><b>tipo</b></td><td>*</td><tr>';


        $b=(($page*DDP)-DDP);
        $c=1;
        while ($c <= DDP AND $b < $righey-2){


            $colonna0 = $dati0[$b];
            $colonna1 = $dati1[$b];
            $colonna2 = $dati2[$b];
            $colonna_file = $dati3[$b];


            echo'<tr><td><a href="wip_voce.php?voce=' .$colonna1. '">'.$colonna0.'</a></td><td>'.$colonna_file.'</td><td>'.$colonna2.'</td>';
            echo'<td style="width: 5%;"><a onclick="return(confirm(\'Attenzione: Sei sicuro di voler cancellare la voce '.$colonna0.' ?\'))" href="wip_elimina.php?elimina=' . $colonna0 . '">[eli]</a></td></tr>';


            $b++;
            $c++;


        }


    }
        else{
        echo'voci non presenti<br>';
    }






      
echo'</table>';