note 92631 added to book.dbase

From: Date: Sat, 01 Aug 2009 04:51:12 +0000
Subject: note 92631 added to book.dbase
Groups: php.notes 
Request: Send a blank email to php-notes+get-158982@lists.php.net to get a copy of this message
Unfortunately the dbase functions are not compiled into my commercial server's php and I needed to read some geo data in shape files, which include data in dbfs. So maybe this will help some others: function echo_dbf($dbfname) { $fdbf = fopen($dbfname,'r'); $fields = array(); $buf = fread($fdbf,32); $header=unpack( "VRecordCount/vFirstRecord/vRecordLength", substr($buf,4,8)); echo 'Header: '.json_encode($header).'<br/>'; $goon = true; $unpackString=''; while ($goon && !feof($fdbf)) { // read fields: $buf = fread($fdbf,32); if (substr($buf,0,1)==chr(13)) {$goon=false;} // end of field list else { $field=unpack( "a11fieldname/A1fieldtype/Voffset/Cfieldlen/Cfielddec", substr($buf,0,18)); echo 'Field: '.json_encode($field).'<br/>'; $unpackString.="A$field[fieldlen]$field[fieldname]/"; array_push($fields, $field);}} fseek($fdbf, $header['FirstRecord']+1); // move back to the start of the first record (after the field definitions) for ($i=1; $i<=$header['RecordCount']; $i++) { $buf = fread($fdbf,$header['RecordLength']); $record=unpack($unpackString,$buf); echo 'record: '.json_encode($record).'<br/>'; echo $i.$buf.'<br/>';} //raw record fclose($fdbf); } This function simply dumps an entire file using echo and json_encode, so you can tweak it to your own needs... (eg random access would just be a matter of changing the seek to : fseek($fdbf, $header['FirstRecord']+1 +($header['RecordLength']* $desiredrecord0based); removing the for loop and returning $record This function doesn't do any type conversion, but it does extract the type if you need to play with dates, or tidy up the numbers etc. So quick and dirty but maybe of use to somebody and illustrates the power of unpack. Erich ---- Server IP: 117.104.162.229 Probable Submitter: 123.211.86.169 (proxied: 123.211.86.169) ---- Manual Page -- http://www.php.net/manual/en/book.dbase.php Edit -- https://master.php.net/note/edit/92631 Del: integrated -- https://master.php.net/note/delete/92631/integrated Del: useless -- https://master.php.net/note/delete/92631/useless Del: bad code -- https://master.php.net/note/delete/92631/bad+code Del: spam -- https://master.php.net/note/delete/92631/spam Del: non-english -- https://master.php.net/note/delete/92631/non-english Del: in docs -- https://master.php.net/note/delete/92631/in+docs Del: other reasons-- https://master.php.net/note/delete/92631 Reject -- https://master.php.net/note/reject/92631 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#158982) next »