<?php
 class Minify_Cache_File { public function __construct($path = '', $fileLocking = false) { if (! $path) { require_once 'Solar/Dir.php'; $path = rtrim(Solar_Dir::tmp(), DIRECTORY_SEPARATOR); } $this->_locking = $fileLocking; $this->_path = $path; } public function store($id, $data) { $flag = $this->_locking ? LOCK_EX : null; if (is_file($this->_path . '/' . $id)) { @unlink($this->_path . '/' . $id); } if (! @file_put_contents($this->_path . '/' . $id, $data, $flag)) { return false; } if ($data !== $this->fetch($id)) { @unlink($file); return false; } return true; } public function getSize($id) { return filesize($this->_path . '/' . $id); } public function isValid($id, $srcMtime) { $file = $this->_path . '/' . $id; return (is_file($file) && (filemtime($file) >= $srcMtime)); } public function display($id) { if ($this->_locking) { $fp = fopen($this->_path . '/' . $id, 'rb'); flock($fp, LOCK_SH); fpassthru($fp); flock($fp, LOCK_UN); fclose($fp); } else { readfile($this->_path . '/' . $id); } } public function fetch($id) { if ($this->_locking) { $fp = fopen($this->_path . '/' . $id, 'rb'); flock($fp, LOCK_SH); $ret = stream_get_contents($fp); flock($fp, LOCK_UN); fclose($fp); return $ret; } else { return file_get_contents($this->_path . '/' . $id); } } public function getPath() { return $this->_path; } private $_path = null; private $_locking = null; } 