View file veppa_wallpaper/sys/helpers/FileDir.php

File size: 5.67Kb
<?php
/**
 * Free Wallpaper Script
 *
 * Free Wallpaper Script by Vepa Halliyev is licensed under a Creative Commons Attribution-Share Alike 3.0 License.
 *
 * @package		Free Wallpaper Script
 * @author		Vepa Halliyev
 * @copyright	Copyright (c) 2009, Vepa Halliyev, veppa.com.
 * @license		http://www.veppa.com/free-wallpaper-script/
 * @link		http://www.veppa.com/free-wallpaper-script/
 * @since		Version 1.0
 * @filesource
 */
class FileDir
{
	static $file_name_counter;

	/**
	 * Check if directory exists. Create if needed.
	 *
	 * @param string $dir
	 * @return bool
	 */
	static public function checkMakeDir($dir)
	{
		if(!is_dir($dir))
		{
			self::checkMakeDir(dirname($dir));
			$return = mkdir($dir);
			@chmod($dir,0777);
			return $return;
		}
		else
		{
			return true;
		}
	}


	/**
	 * Check if file exists. Create if needed.
	 *
	 * @param string $file
	 * @param string $content
	 * @return bool
	 */
	static public function checkMakeFile($file,$content="")
	{
		//make dir
		$dir = dirname($file);
		if(self::checkMakeDir($dir))
		{
			//make file
			if($content)
			{
				//if content given then overwrite

				if (!$handle = fopen($file, 'w'))
				{
					//echo "Cannot open file ($file)";
					echo "Cannot open file";
					exit;
				}

				// Write $somecontent to our opened file.
				if (fwrite($handle, $content) === FALSE)
				{
					// echo "Cannot write to file ($file)";
					echo "Cannot write to file";
					exit;
				}

				//echo "Success, wrote ($somecontent) to file ($file)";

				fclose($handle);
				@chmod($file,0777);
			}
			elseif(!is_file($file))
			{
				//if no content and no file then create emty file
				$handle = fopen($file, "w");
				fclose($handle);
				@chmod($file,0777);
			}
		}

		return is_file($file);
	}

	/**
	 * Remove directory recursive
	 *
	 * @param string $dir
	 * @return bool
	 */
	static public function rmdirr($dir)
	{
		$sys = true;

		if($sys)
		{
			system("rm $dir -dfr",$ret);
			if($ret==0)
			{
				return true;
			}
			else
			{
				return false;
			}
		}
		else
		{
			if(is_dir($dir))
			{
				if($objs = glob($dir."/*"))
				{
					foreach($objs as $obj)
					{
						self::rmdirr($obj);
					}
				}
				system('rm -rf '.$dir);
				//return rmdir($dir);
			}
			elseif(is_file($dir))
			{
				return unlink($dir);
			}
		}
	}




	/**
	 * Generates unique filename in given folder. creates directory if not exists.
	 *
	 * @param string $file
	 * @return array with keys: name,ext,fullname,url
	 */
	static public function genFileName($file)
	{
		$filename = strtolower(basename($file));
		$filename = str_replace(" ","_",$filename);
		$filename = eregi_replace("[^a-z0-9._-]","",$filename);
		$arr = explode(".",$filename);
		$ext = $arr[(count($arr)-1)];
		$name = str_replace(".".$ext,"",$filename);
		$path = dirname($file)."/";

		// make sure directory exists. create if required
		self::checkMakeDir($path);

		$i = self::$file_name_counter[$file]?self::$file_name_counter[$file]:0;
		$new_filename = $name.".".$ext;
		$new_path = $path.$new_filename;

		while(is_file($new_path))
		{
			$new_filename = $name."_".($i++).".".$ext;
			$new_path = $path.$new_filename;
		}
		self::$file_name_counter[$file] = $i;

		$return['name'] = $new_filename;
		$return['ext'] = $ext;
		$return['fullname'] = $new_path;
		$return['url'] = URL_PUBLIC.str_replace(FROG_ROOT,"",$return['fullname']);

		return $return;
	}

	/**
	 * Generates unique directory in given folder. 
	 *
	 * @param string $dir
	 * @return array with keys: name,fullname,url
	 */
	static public function genDirName($dir="./")
	{
		$dir_name = rand();
		$new_path = $dir.$dir_name;

		while(is_dir($new_path))
		{
			$dir_name = rand();
			$new_path = $dir.$dir_name;
		}
		
		// create directory
		self::checkMakeDir($new_path);

		$return['name'] = $dir_name;
		$return['fullname'] = $new_path;
		$return['url'] = URL_PUBLIC.str_replace(FROG_ROOT,"",$return['fullname']);

		return $return;
	}
	
	function forceDownload($filename,$name=''){
				
		if(!$name)
		{
			$name = basename($filename);
		}
		//$filename = $_GET['file'];
		
		// required for IE, otherwise Content-disposition is ignored
		if(ini_get('zlib.output_compression'))
		  ini_set('zlib.output_compression', 'Off');
		
		// addition by Jorg Weske
		$file_extension = strtolower(substr(strrchr($filename,"."),1));
		
		if( $filename == "" ) 
		{
		 	return false;
		} 
		elseif ( ! file_exists( $filename ) ) 
		{
			return false;
		}
		
		switch( $file_extension )
		{
		  case "pdf": $ctype="application/pdf"; break;
		  case "exe": $ctype="application/octet-stream"; break;
		  case "zip": $ctype="application/zip"; break;
		  case "doc": $ctype="application/msword"; break;
		  case "xls": $ctype="application/vnd.ms-excel"; break;
		  case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
		  case "gif": $ctype="image/gif"; break;
		  case "png": $ctype="image/png"; break;
		  case "jpeg":
		  case "jpg": $ctype="image/jpg"; break;
		  default: $ctype="application/force-download";
		}
		
		header("Pragma: public"); // required
		header("Expires: 0");
		header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
		header("Cache-Control: private",false); // required for certain browsers 
		header("Content-Type: $ctype");
		// change, added quotes to allow spaces in filenames, by Rajkumar Singh
		header("Content-Disposition: attachment; filename=\"".$name."\";" );
		header("Content-Transfer-Encoding: binary");
		header("Content-Length: ".filesize($filename));
		readfile("$filename");
		exit();
	}
	
}