From 978e4fa5b9bd6b9b4113adc87f50230640ea0f58 Mon Sep 17 00:00:00 2001 From: Jason Woofenden Date: Fri, 6 Nov 2015 12:03:21 -0500 Subject: [PATCH] add: path_fix_ext() and path_or_mime_to_ext() --- upload.php | 53 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/upload.php b/upload.php index 2509a6b..48a248f 100644 --- a/upload.php +++ b/upload.php @@ -80,11 +80,44 @@ function upload_max_filesize() { } } +# return the extension this path should have WITHOUT the period +function path_or_mime_to_ext($path, $mime = 'text/plain', $default = 'txt') { + $last_dot = strrpos($path, '.'); + if($last_dot === false || $last_dot === 0 || $last_dot === (strlen($path) - 1)) { + # no extension + if(isset($GLOBALS['mime_to_ext'][$mime])) { + return $GLOBALS['mime_to_ext'][$mime]; + } else { + return $default; + } + } else { + $ext = strtolower(substr($path, $last_dot + 1)); + if(isset($GLOBALS['ext_to_ext'][$ext])) { + return $GLOBALS['ext_to_ext'][$ext]; + } + return $ext; + } +} + +# Add or fix extension on path +# This just does string manipulation (ie doesn't move/open/etc any files.) +# Mime type used to generate extension ONLY IF it doesn't have one already. +function path_fix_ext($path, $mime = 'text/plain', $default_ext = '.txt') { + $last_dot = strrpos($path, '.'); + if($last_dot === false || $last_dot === 0) { # no extension + $path .= '.' . path_or_mime_to_ext($path, $mime, $default_ext); + } else { + $basename = substr($path, 0, $last_dot + 1); # keep dot + $path = $basename . path_or_mime_to_ext($path, $mime, $default_ext); + } + + return $path; +} # pass in the client's path that came from an html tag # # mime time used to generate extension ONLY IF it doesn't have one already. -function generate_filename($path, $mime = 'text/plain') { +function generate_filename($path, $mime = 'text/plain', $default_ext = '.txt') { # lower case $filename = strtolower($path); @@ -116,23 +149,7 @@ function generate_filename($path, $mime = 'text/plain') { return '_'; } - # fix extension - $last_dot = strrpos($filename, '.'); - if($last_dot === false) { - #no extension - if(isset($GLOBALS['mime_to_ext'][$mime])) { - $filename .= '.' . $GLOBALS['mime_to_ext'][$mime]; - } else { - $filename .= '.bin'; - } - } else { - $basename = substr($filename, 0, $last_dot); - $ext = substr($filename, $last_dot + 1); - if(isset($GLOBALS['ext_to_ext'][$ext])) { - $ext .= $GLOBALS['ext_to_ext'][$ext]; - } - $filename = $basename . '.' . $ext; - } + $filename = path_fix_ext($filename, $mime, $default_ext); return $filename; } -- 1.7.10.4