diff --git a/inc/lib_files.php b/inc/lib_files.php
index 6188723c028df626045b26c882f83cb3eacce0c4..2e77067b4a770903b8e1839eeb69928238f81395 100755
--- a/inc/lib_files.php
+++ b/inc/lib_files.php
@@ -205,7 +205,7 @@ class OC_FILES {
 		} else if (function_exists("mime_content_type")) {
 			// use mime magic extension if available
 			$mime_type = mime_content_type($fspath);
-		} else if ($this->_can_execute("file")) {
+		} else if (OC_FILES::canExecute("file")) {
 			// it looks like we have a 'file' command, 
 			// lets see it it does have mime support
 			$fp = popen("file -i '$fspath' 2>/dev/null", "r");
@@ -255,6 +255,49 @@ class OC_FILES {
 		
 		return $mime_type;
 	}
+	
+	/**
+	* detect if a given program is found in the search PATH
+	*
+	* helper function used by _mimetype() to detect if the 
+	* external 'file' utility is available
+	*
+	* @param  string  program name
+	* @param  string  optional search path, defaults to $PATH
+	* @return bool    true if executable program found in path
+	*/
+	function canExecute($name, $path = false) 
+	{
+		// path defaults to PATH from environment if not set
+		if ($path === false) {
+			$path = getenv("PATH");
+		}
+		
+		// check method depends on operating system
+		if (!strncmp(PHP_OS, "WIN", 3)) {
+			// on Windows an appropriate COM or EXE file needs to exist
+			$exts = array(".exe", ".com");
+			$check_fn = "file_exists";
+		} else { 
+			// anywhere else we look for an executable file of that name
+			$exts = array("");
+			$check_fn = "is_executable";
+		}
+		
+		// now check the directories in the path for the program
+		foreach (explode(PATH_SEPARATOR, $path) as $dir) {
+			// skip invalid path entries
+			if (!file_exists($dir)) continue;
+			if (!is_dir($dir)) continue;
+
+			// and now look for the file
+			foreach ($exts as $ext) {
+				if ($check_fn("$dir/$name".$ext)) return true;
+			}
+		}
+
+		return false;
+	}
 
 }