I'm using some simple files for caching and some basic user data. I was first just using `file_put_contens` and `file_get_contents`, but realized this could quickly go wrong when traffic starts increasing. I've been trying to figure out how to do it properly with `flock`, correct file modes, etc, and come up with the following functions. Have I understood things correctly? Will this be safe in most normal use-cases, with small to medium web site usage? class File { public static function read($path, $default = NULL) { $fp = @fopen($path, 'r'); if( ! $fp) return $default; flock($fp, LOCK_SH); $data = fread($fp, filesize($path)); flock($fp, LOCK_UN); fclose($fp); return $data; } public static function write($path, $data) { self::check(dirname($path)); $fp = fopen($path, 'c'); flock($fp, LOCK_EX); ftruncate($fp, 0); fwrite($fp, $data); fflush($fp); flock($fp, LOCK_UN); fclose($fp); return $data; } public static function check($dir) { if( ! is_dir($dir)) { // https://en.wikipedia.org/wiki/Chmod#System_call @mkdir($dir, 06750, true); @chmod($dir, 06750); } return $dir; } } Some particular things: - Should using `LOCK_SH` in `read` allow for multiple simultaneous reads? (which will be the bulk of what's happening since writes will happen quite seldom) - Will using `LOCK_EX` in `write` make sure nobody else is reading or writing while the file is changed? - Will using the directory permission mask `06750` makes sure that 1. any files created in that directory will get the same permissions as the directory, and 2. the directory/file will only be writable by the web server user and readable by its group?