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($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
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