/** * nameFile * Returns the valid file name to use * * @param string * @return string */ private function nameFile($path = '', $extension, $method, $original_name = '') { $path = trim($path); $path = $path == '' ? './' : $path; $method = !check_value($method) || !in_array($method, array('original', 'random', 'mixed')) ? 'original' : $method; $original_name = unaccent_string($original_name); $original_name = !check_value($original_name) ? generateRandomString(rand(5, 10)) : preg_replace('/\\.[^.\\s]{3,4}$/', '', $original_name); // Original name as it $strip = array("~", "`", "!", "@", "#", "\$", "%", "^", "&", "*", "(", ")", "_", "=", "+", "[", "{", "]", "}", "\\", "|", ";", ":", "\"", "'", "‘", "’", "“", "”", "–", "—", "—", "–", ",", "<", ".", ">", "/", "?"); $original_name = trim(str_replace($strip, "", strip_tags($original_name))); $original_name = preg_replace('/[\\s\\.]+/', '_', $original_name); // Original name with spaces and dots changed to "_" if (strlen($original_name) == 0) { $method = 'random'; } function get_name_by_method($method, $extension, $original_name) { //$max_lenght = 255 - 1 - strlen($extension) - 5; // 246 $max_lenght = 200; $original_name = substr($original_name, 0, 200); $original_name_lenght = strlen($original_name); switch ($method) { default: case 'original': $name = $original_name; break; case 'random': $name = generateRandomString(rand(5, 10)); break; case 'mixed': if ($original_name_lenght >= $max_lenght) { $name = substr($original_name, 0, $max_lenght - 5); } else { $name = $original_name; } $name .= generateRandomString(5); break; } return $name . '.' . strtolower($extension); } $filename = $path . get_name_by_method($method, $extension, $original_name); while (file_exists($filename)) { if ($method == 'original') { $method = 'mixed'; } $filename = $path . get_name_by_method($method, $extension, $original_name); } return $filename; }
/** * Get a safe filename * $method: original | random | mixed | id * $filename: name of the original file */ function get_filename_by_method($method, $filename) { $max_lenght = 200; $extension = get_file_extension($filename); $clean_filename = substr($filename, 0, -(strlen($extension) + 1)); $clean_filename = unaccent_string($clean_filename); // change áéíóú to aeiou $clean_filename = preg_replace('/[^\\.\\w\\d-]/i', '', $clean_filename); // remove any non alphanumeric, non underscore, non hyphen and non period // Non alphanumeric name uh.. if (strlen($clean_filename) == 0) { $clean_filename = random_string(16); } $unlimited_filename = $clean_filename; // No max_lenght limit $clean_filename = substr($clean_filename, 0, $max_lenght); switch ($method) { default: case 'original': $name = $clean_filename; break; case 'random': $name = random_string(32); break; case 'mixed': if (strlen($clean_filename) >= $max_lenght) { $name = substr($clean_filename, 0, $max_lenght - 5); } else { $name = $clean_filename; } $name .= random_string(5); break; case 'id': $name = $unlimited_filename; break; } return $name . '.' . $extension; }