Search code examples
phpimagerenamestr-replacefile-rename

Remove string from filename for all files (image files) available in the directory without affecting its extensions


Need to remove user requested string from file name. This below is my function.

$directory = $_SERVER['DOCUMENT_ROOT'].'/path/to/files/';
$strString = $objArray['frmName']; // Name to remove which comes from an array.

function doActionOnRemoveStringFromFileName($strString, $directory) {
    if ($handle = opendir($directory)) {
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != "..") {
                if(!strstr($file,$strString)) {
                    continue; 
                }
                $newfilename = str_replace($strString,"",$file);
                rename($directory . $file,$directory . $newfilename);
            }
        }
        closedir($handle);
    }   
}

It works partially good. But the mistake what in this routine is, renaming action also takes on file's extensions. What i need is, Only to rename the file and it should not to be affect its file extensions. Any suggestions please. Thanks in advance :).


Solution

  • I have libraries written by myself that have some of those functions. Look:

    //Returns the filename but ignores its extension
    function getFileNameWithOutExtension($filename) {
         $exploded = explode(".", $filename);
         array_pop($exploded);
    
         //Included a DOT as parameter in implode so, in case the
         //filename contains DOT
         return implode(".", $exploded);
    }
    
    //Returns the extension
    function getFileExtension($file) {
        $exploded = explode(".", $file);
        $ext = end($exploded);
        return $ext;
    }
    

    So you use

    $replacedname = str_replace($strString,"", getFileNameWithOutExtension($file));
    
    $newfilename = $replacedname.".".getFileExtension($file);
    

    Check it working here: http://codepad.org/CAKdCAA0