| 
<?php
 class FileAccess {
 
 private $root;
 private $newcontent;
 private $file;
 protected static $instance;
 private $default_path = true;
 
 public static function getInstance(){
 if(is_null(self::$instance)){
 self::$instance = new self();
 }
 return self::$instance;
 }
 
 protected function __construct(){
 }
 
 public function set($file){
 $file = preg_replace('#[\\\\/]+#', DIRECTORY_SEPARATOR, $file);
 $this -> file = $file;
 return $this;
 }
 
 public function get(){
 if($this -> file){
 return $this -> file;
 }
 return null;
 }
 
 public function save($string){
 if($this -> validateDirectory()){
 file_put_contents($this -> get(),$string);
 return $this;
 }
 }
 
 public function saveAppend($string){
 if($this -> validateDirectory()){
 file_put_contents($this -> get(),$string, FILE_APPEND);
 return $this;
 }
 }
 
 public function savePrepend($string){
 if($this -> validateDirectory()){
 $handle = fopen($this -> get(),'a+');
 fclose($handle);
 $handle = fopen($this -> get(),'r+');
 $len = strlen($string);
 $final_len = filesize($this -> get()) + $len;
 $cache_old = fread($handle, $len);
 rewind($handle);
 $i = 1;
 while (ftell($handle) < $final_len) {
 fwrite($handle, $string);
 $string = $cache_old;
 $cache_old = fread($handle, $len);
 fseek($handle, $i * $len);
 $i++;
 }
 fclose($handle);
 }
 return $this;
 }
 
 public function exists(){
 $args = func_get_args();
 if(!$args){
 return file_exists($this -> get());
 } else {
 return file_exists($args[0]);
 }
 }
 
 protected function validateDirectory(){
 $args = func_get_args();
 if(!$args){
 $directory = dirname ($this -> get());
 } else {
 $directory = dirname ($args[0]);
 }
 if(!is_dir($directory)){
 if(file_exists($directory)){
 return false;
 }
 $this -> validateDirectory($directory);
 if(is_writable(dirname($directory))){
 mkdir($directory);
 } else {
 return false;
 }
 }
 return true;
 }
 
 public function render(){
 if($this -> exists()){
 return file_get_contents($this -> get());
 }
 return false;
 }
 
 public function delete(){
 if($this -> exists()){
 return @unlink($this -> get());
 }
 return false;
 }
 
 public function modified(){
 if($this -> exists()){
 return filemtime($this -> get());
 }
 return false;
 }
 
 public function getAge(){
 if(($mod = $this -> modified())){
 return $_SERVER["REQUEST_TIME"] - $mod;
 }
 return false;
 }
 }
 |