note 74547 added to ref.dbase
| From: | bi dot idanATgmail dot com at osu1 dot php dot net | Date: | Mon, 16 Apr 2007 23:40:35 +0000 |
| Subject: | note 74547 added to ref.dbase | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-125485@lists.php.net to get a copy of this message | ||
I know lots of you dosent really use dbase, but i've builded a class to help the one how dose.
(sorry for bad english)
- dbase.php
<?php
set_time_limit (0);
// site_path defined by parent
require_once (SITE_PATH. '/server/php/libs/dbase/handler.php');
/* DBase (dbf)
* manage dbf files, exports and search functionality
* with buildin optimizers for fast performance
*/
class DBase
{
private $handler = false;
private $searchopt = array (); // Search optimizer
private function unload ()
{
if ($this-> handler !== false)
unset ($this-> handler);
}
public function __construct ($file = false)
{
if ($file !== false)
$this-> load ($file);
}
public function __destruct ()
{
$this-> unload ();
}
public function load ($file)
{
$resource = dbase_open ($file, 0);
$this-> handler = new DBase_Handler ($resource);
return $this-> handler;
}
/* Search
* search for string inside header
* returns record number
* false returned if not found or error occurred
* limit_results gets int or false, limit_results equels one will limit the
* search results for one result only, false for no limit
*/
public function search ($headerText, $string, $limit_results = false, $handler = false)
{
if ($handler === false)
$handler = $this-> handler;
if ($this-> searchopt [$headerText][$string])
return $this-> searchopt [$headerText][$string];
else
{
$size = $handler-> getSize ();
if ( ( $headerNumber = $handler-> getHeaderNumber ($headerText) ) !== false)
{
$results = array ();
for ($i = 1; $i < $size; $i++)
{
$record = $handler-> getRecord ($i, false); // Disabled optimizer to prevent memory overflow
if (trim ($record [$headerNumber]) == $string)
{
$results[] = $i;
if ( ($limit_results !== false) && (sizeof ($results) == $limit_results) )
break;
}
}
if (sizeof ($results) > 0)
{
$this-> searchopt [$headerText][$string] = $results;
return $this-> search ($headerText, $string, $handler);
}
return false;
} else
return false;
}
}
}
?>
- dbase_handler.php
<?php
/* DBase Handler (dbf)
* handles dbase resource
*/
class DBase_Handler
{
private $resource;
private $size; // Records Count
private $header = array ();
private $dataopt = array (); // Data optimizer
private function setHeader ()
{
$this-> header = dbase_get_header_info ($this-> resource);
}
public function __construct ($resource)
{
$this-> resource = $resource;
$this-> setHeader ();
$this-> size = dbase_numrecords ($this-> resource);
}
public function __destruct ()
{
dbase_close ($this-> resource);
}
public function getRecord ($record_number, $dataopt = true)
{
if ($record_number > $this-> size)
return false;
else
{
if ($this-> dataopt [$record_number])
return $this-> dataopt [$record_number];
else
{
$record = dbase_get_record ($this-> resource, $record_number);
if ($dataopt === true) // Data saving optimizer
{
$this-> dataopt [$record_number] = $record;
return $this-> getRecord ($record_number);
} else
return $record;
}
}
}
public function getHeaderNumber ($headerText)
{
foreach ($this-> header as $index => $header)
{
if ($header ['name'] == $headerText)
{
return $index;
break;
}
}
return false;
}
public function getHeader ($headerNumber)
{
if ($headerNumber <= sizeof ($this-> header))
return $this-> header [$headerNumber];
else
return false;
}
public function getSize ()
{
return $this-> size;
}
}
?>
----
Server IP: 212.199.163.191
Probable Submitter: 87.69.18.51
----
Manual Page -- http://www.php.net/manual/en/ref.dbase.php
Edit -- https://master.php.net/note/edit/74547
Del: integrated -- https://master.php.net/note/delete/74547/integrated
Del: useless -- https://master.php.net/note/delete/74547/useless
Del: bad code -- https://master.php.net/note/delete/74547/bad+code
Del: spam -- https://master.php.net/note/delete/74547/spam
Del: non-english -- https://master.php.net/note/delete/74547/non-english
Del: in docs -- https://master.php.net/note/delete/74547/in+docs
Del: other reasons-- https://master.php.net/note/delete/74547
Reject -- https://master.php.net/note/reject/74547
Search -- https://master.php.net/manage/user-notes.php