GoodWeb

Ho un problema con la lettura di file testo con Linux e non con Windows !!!
La cosa strana è che apparentemente funge, ma solo la lettura del primo record.
Sicuramente ho sbagliato io in qualche cosa, ma sinceramente non capisco o trovo dove....

Le stesse procedure utilizzate su Windows XP e PHP 5 (in locale) e su server Win2000 e PHP 4 funzionano bene, viceversa installate su server Linux (CentOS) no..

Illustro brevemente gli script utilizzati:
Parte dove definisco la struttura dei DB FlatFile
Estensione file, delimitatore di campo, delimitatore di record, delimitatore array e tipo di campo gestito
Struttura del DataBase
Codice PHP:
//-- define dir where db will be stored
DEFINE ('DB_DIR',PATH_SITE."_db");

//-- define db file extension
DEFINE ('DB_FILE_EXT','txt');

//-- define db field delimiter
DEFINE ("DB_FIELD_DELIMIT",';§;');

//-- define db record delimiter
DEFINE ("DB_RECORD_DELIMIT",';§§');

//-- define db record delimiter
DEFINE ("DB_ARRAY_DELIMIT",'#||#');

//-- define the data types
DEFINE ('DB_TYPE_ID','id');
DEFINE ('DB_TYPE_STRING','string');
DEFINE ('DB_TYPE_TEXT','text');
DEFINE ('DB_TYPE_ARRAY','array');

//-- define db structure (for each table field name => field type)
$_db_structure = array
(
    
'menu' => array (
            
'menu_id' => DB_TYPE_ID,
            
'menu_name' => DB_TYPE_STRING,
            
'menu_title' => DB_TYPE_TEXT,
            
'menu_type' => DB_TYPE_ID,
            
'menu_link' => DB_TYPE_STRING
            
),
..... 
La funzione che legge il file è la seguente:
Codice PHP:
<?
...
function 
db_read($db_table)
{
    global 
$_db_structure;

    
//-- the records will be added into this array
    
$a_record = array();
    
$db_filename DB_DIR.'/'.$db_table.'.'.DB_FILE_EXT//-- database filename

    //-- check if the database file exists
    
if (file_exists($db_filename) and filesize($db_filename) > 0)
    {
          
//-- read the database
        
$handle fopen($db_filename'r');
        
$contents fread($handlefilesize($db_filename));
        
fclose($handle);

        
//-- get the lines
        
$a_lines explode(DB_RECORD_DELIMIT."\r\n",$contents);
        
$i_record 0//-- record count
        
for ($i=0;$i<count($a_lines);$i++)
        {
            if (!empty(
$a_lines[$i]))
            {
                
$a_line explode(DB_FIELD_DELIMIT,$a_lines[$i]); //-- get the record line
                
$i_field=0;//-- field count

                
foreach ($_db_structure[$db_table] as $str_field=>$str_type)
                {
                    
stampo la mia tabella
                
}
                
$i_record++;
            }
//-- if
        
}//-- for
    
}
    
//-- return the record
    
return $a_record;
}
...
?>
Sembra che con linux la mia procedura non sia in grado di capire o leggere la fine dei record
Codice PHP:
.... $a_lines explode(DB_RECORD_DELIMIT."\r\n",$contents); ...... 
infatti a video tramite un print_r dell'array mi ritorna il primo record completo e suddiviso, ma alla fine dello stesso mi ritrovo:
campo;§§\n 2
dove campo è effettivamente l'ultimo campo del record,
;§§ è il delimitatore di record come impostato
e 2 è l'id di partenza del secondo record.....

Suggerimenti !!
Grazie 1000 a tutti per l'interesse