File helper class.
Class declared in SYSPATH/classes/File.php on line 3.
Lookup a single file extension by MIME type.
string
$type
required - MIME type to lookup mixed
- First file extension matching or falsepublic static function ext_by_mime($type)
{
return current(File::exts_by_mime($type));
}
Lookup file extensions by MIME type
string
$type
required - File MIME type array
- File extensions matching MIME typepublic static function exts_by_mime($type)
{
static $types = [];
// Fill the static array
if (empty($types)) {
foreach (Kohana::$config->load('mimes') as $ext => $mimes) {
foreach ($mimes as $mime) {
if ($mime == 'application/octet-stream') {
// octet-stream is a generic binary
continue;
}
if (!isset($types[$mime])) {
$types[$mime] = [(string) $ext];
} elseif (!in_array($ext, $types[$mime])) {
$types[$mime][] = (string) $ext;
}
}
}
}
return isset($types[$type]) ? $types[$type] : false;
}
Join a split file into a whole file. Does the reverse of File::split.
$count = File::join($file);
string
$filename
required - Split filename, without .000 extension integer
- The number of pieces that were joined.public static function join($filename)
{
// Open the file
$file = fopen($filename, 'wb+');
// Read files in 8k blocks
$block_size = 1024 * 8;
// Total number of pieces
$pieces = 0;
while (is_file($piece = $filename . '.' . str_pad($pieces + 1, 3, '0', STR_PAD_LEFT))) {
// Read another piece
$pieces += 1;
// Open the piece for reading
$piece = fopen($piece, 'rb');
while (!feof($piece)) {
// Transfer the data in blocks
fwrite($file, fread($piece, $block_size));
}
// Close the piece
fclose($piece);
}
return $pieces;
}
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.
$mime = File::mime($file);
string
$filename
required - File name or path string
- Mime type on successfalse
- On failurepublic static function mime($filename)
{
// Get the complete path to the file
$filename = realpath($filename);
// Get the extension from the filename
$extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
if (preg_match('/^(?:jpe?g|png|[gt]if|bmp|swf)$/', $extension)) {
// Use getimagesize() to find the mime type on images
$file = getimagesize($filename);
if (isset($file['mime']))
return $file['mime'];
}
if (class_exists('finfo', false)) {
if ($info = new finfo(defined('FILEINFO_MIME_TYPE') ? FILEINFO_MIME_TYPE : FILEINFO_MIME)) {
return $info->file($filename);
}
}
if (ini_get('mime_magic.magicfile') AND function_exists('mime_content_type')) {
// The mime_content_type function is only useful with a magic file
return mime_content_type($filename);
}
if (!empty($extension)) {
return File::mime_by_ext($extension);
}
// Unable to find the mime-type
return false;
}
Return the mime type of an extension.
$mime = File::mime_by_ext('png'); // "image/png"
string
$extension
required - Php, pdf, txt, etc string
- Mime type on successfalse
- On failurepublic static function mime_by_ext($extension)
{
// Load all of the mime types
$mimes = Kohana::$config->load('mimes');
return isset($mimes[$extension]) ? $mimes[$extension][0] : false;
}
Lookup MIME types for a file
string
$extension
required - Extension to lookup array
- Array of MIMEs associated with the specified extensionpublic static function mimes_by_ext($extension)
{
// Load all of the mime types
$mimes = Kohana::$config->load('mimes');
return isset($mimes[$extension]) ? ((array) $mimes[$extension]) : [];
}
Split a file into pieces matching a specific size. Used when you need to split large files into smaller pieces for easy transmission.
$count = File::split($file);
string
$filename
required - File to be split integer
$piece_size
= integer 10 - Size, in MB, for each piece to be integer
- The number of pieces that were createdpublic static function split($filename, $piece_size = 10)
{
// Open the input file
$file = fopen($filename, 'rb');
// Change the piece size to bytes
$piece_size = floor($piece_size * 1024 * 1024);
// Write files in 8k blocks
$block_size = 1024 * 8;
// Total number of pieces
$pieces = 0;
while (!feof($file)) {
// Create another piece
$pieces += 1;
// Create a new file piece
$piece = str_pad($pieces, 3, '0', STR_PAD_LEFT);
$piece = fopen($filename . '.' . $piece, 'wb+');
// Number of bytes read
$read = 0;
do {
// Transfer the data in blocks
fwrite($piece, fread($file, $block_size));
// Another block has been read
$read += $block_size;
} while ($read < $piece_size);
// Close the piece
fclose($piece);
}
// Close the file
fclose($file);
return $pieces;
}