File Testo e Linux

  • Creatore Discussione Creatore Discussione olGerva
  • Data di inizio Data di inizio

olGerva

Nuovo Utente
11 Giu 2008
14
0
0
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
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:
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($handle, filesize($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
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
 

Discussioni simili