New upstream version 0.6.27
This commit is contained in:
@@ -1,4 +1,12 @@
|
||||
<?php defined('SYSPATH') OR die('No direct access allowed.');
|
||||
<?php
|
||||
|
||||
// phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
defined('SYSPATH') or die('No direct access allowed.');
|
||||
// phpcs:enable PSR1.Files.SideEffects
|
||||
// phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
|
||||
|
||||
|
||||
/**
|
||||
* File helper class.
|
||||
*
|
||||
@@ -9,178 +17,171 @@
|
||||
* @copyright (c) 2007-2008 Kohana Team
|
||||
* @license http://kohanaphp.com/license.html
|
||||
*/
|
||||
class file_Core {
|
||||
class file_Core
|
||||
{
|
||||
/**
|
||||
* Attempt to get the mime type from a file. This method is horribly
|
||||
* unreliable, due to PHP being horribly unreliable when it comes to
|
||||
* determining the mime-type of a file.
|
||||
*
|
||||
* @param string filename
|
||||
* @return string mime-type, if found
|
||||
* @return boolean FALSE, if not found
|
||||
*/
|
||||
public static function mime($filename)
|
||||
{
|
||||
// Make sure the file is readable
|
||||
if (! (is_file($filename) and is_readable($filename))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to get the mime type from a file. This method is horribly
|
||||
* unreliable, due to PHP being horribly unreliable when it comes to
|
||||
* determining the mime-type of a file.
|
||||
*
|
||||
* @param string filename
|
||||
* @return string mime-type, if found
|
||||
* @return boolean FALSE, if not found
|
||||
*/
|
||||
public static function mime($filename)
|
||||
{
|
||||
// Make sure the file is readable
|
||||
if ( ! (is_file($filename) AND is_readable($filename)))
|
||||
return FALSE;
|
||||
// Get the extension from the filename
|
||||
$extension = strtolower(substr(strrchr($filename, '.'), 1));
|
||||
|
||||
// Get the extension from the filename
|
||||
$extension = strtolower(substr(strrchr($filename, '.'), 1));
|
||||
if (preg_match('/^(?:jpe?g|png|[gt]if|bmp|swf)$/', $extension)) {
|
||||
// Disable error reporting
|
||||
$ER = error_reporting(0);
|
||||
|
||||
if (preg_match('/^(?:jpe?g|png|[gt]if|bmp|swf)$/', $extension))
|
||||
{
|
||||
// Disable error reporting
|
||||
$ER = error_reporting(0);
|
||||
// Use getimagesize() to find the mime type on images
|
||||
$mime = getimagesize($filename);
|
||||
|
||||
// Use getimagesize() to find the mime type on images
|
||||
$mime = getimagesize($filename);
|
||||
// Turn error reporting back on
|
||||
error_reporting($ER);
|
||||
|
||||
// Turn error reporting back on
|
||||
error_reporting($ER);
|
||||
// Return the mime type
|
||||
if (isset($mime['mime'])) {
|
||||
return $mime['mime'];
|
||||
}
|
||||
}
|
||||
|
||||
// Return the mime type
|
||||
if (isset($mime['mime']))
|
||||
return $mime['mime'];
|
||||
}
|
||||
if (function_exists('finfo_open')) {
|
||||
// Use the fileinfo extension
|
||||
$finfo = finfo_open(FILEINFO_MIME);
|
||||
$mime = finfo_file($finfo, $filename);
|
||||
finfo_close($finfo);
|
||||
|
||||
if (function_exists('finfo_open'))
|
||||
{
|
||||
// Use the fileinfo extension
|
||||
$finfo = finfo_open(FILEINFO_MIME);
|
||||
$mime = finfo_file($finfo, $filename);
|
||||
finfo_close($finfo);
|
||||
// Return the mime type
|
||||
return $mime;
|
||||
}
|
||||
|
||||
// Return the mime type
|
||||
return $mime;
|
||||
}
|
||||
if (ini_get('mime_magic.magicfile') and function_exists('mime_content_type')) {
|
||||
// Return the mime type using mime_content_type
|
||||
return mime_content_type($filename);
|
||||
}
|
||||
|
||||
if (ini_get('mime_magic.magicfile') AND function_exists('mime_content_type'))
|
||||
{
|
||||
// Return the mime type using mime_content_type
|
||||
return mime_content_type($filename);
|
||||
}
|
||||
if (! KOHANA_IS_WIN) {
|
||||
// Attempt to locate use the file command, checking the return value
|
||||
if ($command = trim(exec('which file', $output, $return)) and $return === 0) {
|
||||
return trim(exec($command . ' -bi ' . escapeshellarg($filename)));
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! KOHANA_IS_WIN)
|
||||
{
|
||||
// Attempt to locate use the file command, checking the return value
|
||||
if ($command = trim(exec('which file', $output, $return)) AND $return === 0)
|
||||
{
|
||||
return trim(exec($command.' -bi '.escapeshellarg($filename)));
|
||||
}
|
||||
}
|
||||
if (! empty($extension) and is_array($mime = Kohana::config('mimes.' . $extension))) {
|
||||
// Return the mime-type guess, based on the extension
|
||||
return $mime[0];
|
||||
}
|
||||
|
||||
if ( ! empty($extension) AND is_array($mime = Kohana::config('mimes.'.$extension)))
|
||||
{
|
||||
// Return the mime-type guess, based on the extension
|
||||
return $mime[0];
|
||||
}
|
||||
// Unable to find the mime-type
|
||||
return false;
|
||||
}
|
||||
|
||||
// Unable to find the mime-type
|
||||
return FALSE;
|
||||
}
|
||||
/**
|
||||
* Split a file into pieces matching a specific size.
|
||||
*
|
||||
* @param string file to be split
|
||||
* @param string directory to output to, defaults to the same directory as the file
|
||||
* @param integer size, in MB, for each chunk to be
|
||||
* @return integer The number of pieces that were created.
|
||||
*/
|
||||
public static function split($filename, $output_dir = false, $piece_size = 10)
|
||||
{
|
||||
// Find output dir
|
||||
$output_dir = ($output_dir == false) ? pathinfo(str_replace('\\', '/', realpath($filename)), PATHINFO_DIRNAME) : str_replace('\\', '/', realpath($output_dir));
|
||||
$output_dir = rtrim($output_dir, '/') . '/';
|
||||
|
||||
/**
|
||||
* Split a file into pieces matching a specific size.
|
||||
*
|
||||
* @param string file to be split
|
||||
* @param string directory to output to, defaults to the same directory as the file
|
||||
* @param integer size, in MB, for each chunk to be
|
||||
* @return integer The number of pieces that were created.
|
||||
*/
|
||||
public static function split($filename, $output_dir = FALSE, $piece_size = 10)
|
||||
{
|
||||
// Find output dir
|
||||
$output_dir = ($output_dir == FALSE) ? pathinfo(str_replace('\\', '/', realpath($filename)), PATHINFO_DIRNAME) : str_replace('\\', '/', realpath($output_dir));
|
||||
$output_dir = rtrim($output_dir, '/').'/';
|
||||
// Open files for writing
|
||||
$input_file = fopen($filename, 'rb');
|
||||
|
||||
// Open files for writing
|
||||
$input_file = fopen($filename, 'rb');
|
||||
// Change the piece size to bytes
|
||||
$piece_size = 1024 * 1024 * (int) $piece_size; // Size in bytes
|
||||
|
||||
// Change the piece size to bytes
|
||||
$piece_size = 1024 * 1024 * (int) $piece_size; // Size in bytes
|
||||
// Set up reading variables
|
||||
$read = 0; // Number of bytes read
|
||||
$piece = 1; // Current piece
|
||||
$chunk = 1024 * 8; // Chunk size to read
|
||||
|
||||
// Set up reading variables
|
||||
$read = 0; // Number of bytes read
|
||||
$piece = 1; // Current piece
|
||||
$chunk = 1024 * 8; // Chunk size to read
|
||||
// Split the file
|
||||
while (! feof($input_file)) {
|
||||
// Open a new piece
|
||||
$piece_name = $filename . '.' . str_pad($piece, 3, '0', STR_PAD_LEFT);
|
||||
$piece_open = @fopen($piece_name, 'wb+') or die('Could not write piece ' . $piece_name);
|
||||
|
||||
// Split the file
|
||||
while ( ! feof($input_file))
|
||||
{
|
||||
// Open a new piece
|
||||
$piece_name = $filename.'.'.str_pad($piece, 3, '0', STR_PAD_LEFT);
|
||||
$piece_open = @fopen($piece_name, 'wb+') or die('Could not write piece '.$piece_name);
|
||||
// Fill the current piece
|
||||
while ($read < $piece_size and $data = fread($input_file, $chunk)) {
|
||||
fwrite($piece_open, $data) or die('Could not write to open piece ' . $piece_name);
|
||||
$read += $chunk;
|
||||
}
|
||||
|
||||
// Fill the current piece
|
||||
while ($read < $piece_size AND $data = fread($input_file, $chunk))
|
||||
{
|
||||
fwrite($piece_open, $data) or die('Could not write to open piece '.$piece_name);
|
||||
$read += $chunk;
|
||||
}
|
||||
// Close the current piece
|
||||
fclose($piece_open);
|
||||
|
||||
// Close the current piece
|
||||
fclose($piece_open);
|
||||
// Prepare to open a new piece
|
||||
$read = 0;
|
||||
$piece++;
|
||||
|
||||
// Prepare to open a new piece
|
||||
$read = 0;
|
||||
$piece++;
|
||||
// Make sure that piece is valid
|
||||
($piece < 999) or die('Maximum of 999 pieces exceeded, try a larger piece size');
|
||||
}
|
||||
|
||||
// Make sure that piece is valid
|
||||
($piece < 999) or die('Maximum of 999 pieces exceeded, try a larger piece size');
|
||||
}
|
||||
// Close input file
|
||||
fclose($input_file);
|
||||
|
||||
// Close input file
|
||||
fclose($input_file);
|
||||
// Returns the number of pieces that were created
|
||||
return ($piece - 1);
|
||||
}
|
||||
|
||||
// Returns the number of pieces that were created
|
||||
return ($piece - 1);
|
||||
}
|
||||
/**
|
||||
* Join a split file into a whole file.
|
||||
*
|
||||
* @param string split filename, without .000 extension
|
||||
* @param string output filename, if different then an the filename
|
||||
* @return integer The number of pieces that were joined.
|
||||
*/
|
||||
public static function join($filename, $output = false)
|
||||
{
|
||||
if ($output == false) {
|
||||
$output = $filename;
|
||||
}
|
||||
|
||||
/**
|
||||
* Join a split file into a whole file.
|
||||
*
|
||||
* @param string split filename, without .000 extension
|
||||
* @param string output filename, if different then an the filename
|
||||
* @return integer The number of pieces that were joined.
|
||||
*/
|
||||
public static function join($filename, $output = FALSE)
|
||||
{
|
||||
if ($output == FALSE)
|
||||
$output = $filename;
|
||||
// Set up reading variables
|
||||
$piece = 1; // Current piece
|
||||
$chunk = 1024 * 8; // Chunk size to read
|
||||
|
||||
// Set up reading variables
|
||||
$piece = 1; // Current piece
|
||||
$chunk = 1024 * 8; // Chunk size to read
|
||||
// Open output file
|
||||
$output_file = @fopen($output, 'wb+') or die('Could not open output file ' . $output);
|
||||
|
||||
// Open output file
|
||||
$output_file = @fopen($output, 'wb+') or die('Could not open output file '.$output);
|
||||
// Read each piece
|
||||
while ($piece_open = @fopen(($piece_name = $filename . '.' . str_pad($piece, 3, '0', STR_PAD_LEFT)), 'rb')) {
|
||||
// Write the piece into the output file
|
||||
while (! feof($piece_open)) {
|
||||
fwrite($output_file, fread($piece_open, $chunk));
|
||||
}
|
||||
|
||||
// Read each piece
|
||||
while ($piece_open = @fopen(($piece_name = $filename.'.'.str_pad($piece, 3, '0', STR_PAD_LEFT)), 'rb'))
|
||||
{
|
||||
// Write the piece into the output file
|
||||
while ( ! feof($piece_open))
|
||||
{
|
||||
fwrite($output_file, fread($piece_open, $chunk));
|
||||
}
|
||||
// Close the current piece
|
||||
fclose($piece_open);
|
||||
|
||||
// Close the current piece
|
||||
fclose($piece_open);
|
||||
// Prepare for a new piece
|
||||
$piece++;
|
||||
|
||||
// Prepare for a new piece
|
||||
$piece++;
|
||||
// Make sure piece is valid
|
||||
($piece < 999) or die('Maximum of 999 pieces exceeded');
|
||||
}
|
||||
|
||||
// Make sure piece is valid
|
||||
($piece < 999) or die('Maximum of 999 pieces exceeded');
|
||||
}
|
||||
// Close the output file
|
||||
fclose($output_file);
|
||||
|
||||
// Close the output file
|
||||
fclose($output_file);
|
||||
|
||||
// Return the number of pieces joined
|
||||
return ($piece - 1);
|
||||
}
|
||||
|
||||
} // End file
|
||||
// Return the number of pieces joined
|
||||
return ($piece - 1);
|
||||
}
|
||||
}
|
||||
// End file
|
||||
|
||||
Reference in New Issue
Block a user