134 lines
3.3 KiB
PHP
134 lines
3.3 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* @version $Id: file.php 13031 2009-10-02 21:54:22Z louis $
|
||
|
* @package Joomla.Framework
|
||
|
* @subpackage FileSystem
|
||
|
* @copyright Copyright (C) 2005 - 2009 Open Source Matters, Inc. All rights reserved.
|
||
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||
|
*/
|
||
|
|
||
|
// Check to ensure this file is within the rest of the framework
|
||
|
if( !defined( '_JEXEC' ) && !defined( '_VALID_MOS' ) ) die( 'Restricted access' );
|
||
|
|
||
|
require_once(dirname(__FILE__).'/path.php');
|
||
|
|
||
|
/**
|
||
|
* A File handling class
|
||
|
*
|
||
|
* @static
|
||
|
* @package Joomla.Framework
|
||
|
* @subpackage FileSystem
|
||
|
* @since 1.5
|
||
|
*/
|
||
|
class extFile
|
||
|
{
|
||
|
/**
|
||
|
* Gets the extension of a file name
|
||
|
*
|
||
|
* @param string $file The file name
|
||
|
* @return string The file extension
|
||
|
* @since 1.5
|
||
|
*/
|
||
|
static function getExt($file) {
|
||
|
$dot = strrpos($file, '.') + 1;
|
||
|
return substr($file, $dot);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Strips the last extension off a file name
|
||
|
*
|
||
|
* @param string $file The file name
|
||
|
* @return string The file name without the extension
|
||
|
* @since 1.5
|
||
|
*/
|
||
|
static function stripExt($file) {
|
||
|
return preg_replace('#\.[^.]*$#', '', $file);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Makes file name safe to use
|
||
|
*
|
||
|
* @param string $file The name of the file [not full path]
|
||
|
* @return string The sanitised string
|
||
|
* @since 1.5
|
||
|
*/
|
||
|
static function makeSafe($file) {
|
||
|
$regex = array('#(\.){2,}#', '#[^A-Za-z0-9\.\_\- ]#', '#^\.#');
|
||
|
return preg_replace($regex, '', $file);
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Read the contents of a file
|
||
|
*
|
||
|
* @param string $filename The full file path
|
||
|
* @param boolean $incpath Use include path
|
||
|
* @param int $amount Amount of file to read
|
||
|
* @param int $chunksize Size of chunks to read
|
||
|
* @param int $offset Offset of the file
|
||
|
* @return mixed Returns file contents or boolean False if failed
|
||
|
* @since 1.5
|
||
|
*/
|
||
|
static function read($filename, $incpath = false, $amount = 0, $chunksize = 8192, $offset = 0)
|
||
|
{
|
||
|
// Initialize variables
|
||
|
$data = null;
|
||
|
if($amount && $chunksize > $amount) { $chunksize = $amount; }
|
||
|
if (false === $fh = fopen($filename, 'rb', $incpath)) {
|
||
|
JError::raiseWarning(21, 'extFile::read: '.JText::_('Unable to open file') . ": '$filename'");
|
||
|
return false;
|
||
|
}
|
||
|
clearstatcache();
|
||
|
if($offset) fseek($fh, $offset);
|
||
|
if ($fsize = @ filesize($filename)) {
|
||
|
if($amount && $fsize > $amount) {
|
||
|
$data = fread($fh, $amount);
|
||
|
} else {
|
||
|
$data = fread($fh, $fsize);
|
||
|
}
|
||
|
} else {
|
||
|
$data = '';
|
||
|
$x = 0;
|
||
|
// While its:
|
||
|
// 1: Not the end of the file AND
|
||
|
// 2a: No Max Amount set OR
|
||
|
// 2b: The length of the data is less than the max amount we want
|
||
|
while (!feof($fh) && (!$amount || strlen($data) < $amount)) {
|
||
|
$data .= fread($fh, $chunksize);
|
||
|
}
|
||
|
}
|
||
|
fclose($fh);
|
||
|
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Wrapper for the standard file_exists function
|
||
|
*
|
||
|
* @param string $file File path
|
||
|
* @return boolean True if path is a file
|
||
|
* @since 1.5
|
||
|
*/
|
||
|
static function exists($file)
|
||
|
{
|
||
|
return is_file(extPath::clean($file));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the name, sans any path
|
||
|
*
|
||
|
* param string $file File path
|
||
|
* @return string filename
|
||
|
* @since 1.5
|
||
|
*/
|
||
|
static function getName($file) {
|
||
|
$slash = strrpos($file, DS);
|
||
|
if ($slash !== false) {
|
||
|
return substr($file, $slash + 1);
|
||
|
} else {
|
||
|
return $file;
|
||
|
}
|
||
|
}
|
||
|
}
|