10.1. Using Text-File Databases
Problem
You want a lightweight way to store information between requests.
Solution
Use a text file with advisory locking to prevent conflicts. You can
store data in the text file in any useful format (CSV,
pipe-delimited, etc.) One convenient way is to put all the data you
want to store in one variable (a big associative array) and then
store the output of calling serialize( )
on the variable:
$data_file = '/tmp/data'; // open the file for reading and writing $fh = fopen($data_file,'a+') or die($php_errormsg); rewind($fh) or die($php_errormsg); // get an exclusive lock on the file flock($fh,LOCK_EX) or die($php_errormsg); // read in and unserialize the data $serialized_data = fread($fh,filesize($data_file)) or die($php_errormsg); $data = unserialize($serialized_data); /* * do whatever you need to with $data ... */ // reserialize the data $serialized_data = serialize($data); // clear out the file rewind($fh) or die($php_errormsg); ftruncate($fp,0) or die($php_errormsg); // write the data back to the file and release the lock if (-1 == (fwrite($fh,$serialized_data))) { die($php_errormsg); } fflush($fh) or die($php_errormsg); flock($fh,LOCK_UN) or die($php_errormsg); fclose($fh) or die($php_errormsg);
Discussion
Storing your data in a text file doesn’t require any additional database software to be installed, but that’s pretty much its only advantage. Its main disadvantages are clumsiness and inefficiency. At the beginning of a request, you’ve got to ...
Get PHP Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.