Using Text-File Databases in PHP
By: David Sklar
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 lock your text file and haul out all your data from it, even if you're only using a little bit of the data. Until you unlock the file at the end of the request, all other processes have to wait around, doing nothing, which means all your users are waiting too. One of the great assets of databases is that they give you structured access to your data, so you only lock (and load into memory) the data you actually care about. The text file solution doesn't do that.
What's worse, the locking you can do with a text file isn't nearly as robust as what you can do with a database. Because flock( ) provides a kind of file locking called advisory locking, the only thing that prevents multiple processes from stepping on each other and trashing your data is politeness and diligent programming. There's no guarantee your data is safe from an innocently incompetent or intentionally malicious program.
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);
Archived Comments
Comment on this tutorial
- Data Science
- Android
- AJAX
- ASP.net
- C
- C++
- C#
- Cocoa
- Cloud Computing
- HTML5
- Java
- Javascript
- JSF
- JSP
- J2ME
- Java Beans
- EJB
- JDBC
- Linux
- Mac OS X
- iPhone
- MySQL
- Office 365
- Perl
- PHP
- Python
- Ruby
- VB.net
- Hibernate
- Struts
- SAP
- Trends
- Tech Reviews
- WebServices
- XML
- Certification
- Interview
categories
Related Tutorials
PHP code to write to a CSV file for Microsoft Applications
PHP code to write to a CSV file from MySQL query
PHP code to import from CSV file to MySQL
Password must include both numeric and alphabetic characters - Magento
Error: Length parameter must be greater than 0
PHP file upload prompts authentication for anonymous users
PHP file upload with IIS on windows XP/2000 etc
Multiple File Upload in PHP using IFRAME
Resume or Pause File Uploads in PHP
Exception in module wampmanager.exe at 000F15A0 in Windows 8