file_create_filename($basename, $directory)
Creates a full file path from a directory and filename.
If a file with the specified name already exists, an alternative will be used.
Parameters
$basename: String filename
$directory: String containing the directory or parent URI.
Return value
File path consisting of $directory and a unique filename based off of $basename.
Related topics
- File interface
- Common file handling functions.
File
- core/includes/file.inc, line 759
- API for handling file uploads and server file management.
Code
function file_create_filename($basename, $directory) { // Strip control characters (ASCII value < 32). Though these are allowed in // some filesystems, not many applications handle them well. $basename = preg_replace('/[\x00-\x1F]/u', '_', $basename); if (substr(PHP_OS, 0, 3) == 'WIN') { // These characters are not allowed in Windows filenames $basename = str_replace(array(':', '*', '?', '"', '<', '>', '|'), '_', $basename); } // A URI or path may already have a trailing slash or look like "public://". if (substr($directory, -1) == '/') { $separator = ''; } else { $separator = '/'; } $destination = $directory . $separator . $basename; if (file_exists($destination)) { // Destination file already exists, generate an alternative. $pos = strrpos($basename, '.'); if ($pos !== FALSE) { $name = substr($basename, 0, $pos); $ext = substr($basename, $pos); } else { $name = $basename; $ext = ''; } $counter = 0; do { $destination = $directory . $separator . $name . '_' . $counter++ . $ext; } while (file_exists($destination)); } return $destination; }
Please login to continue.