PHP:将扩展名附加到所有文件中,文件夹中没有扩展名

时间:2019-02-13 14:17:58

标签: php append

我有一个名为MyFolder的文件夹,其中包含以下三个文件:

file1 file2 file3.gif file.html

我需要将扩展​​名'.gif'添加到没有扩展名的文件中。然后应将第一个file1和第二个file2文件作为目标。

结果应为:

file1.gif file2.gif file3.gif file.html

这些文件是gif文件,但是它们以某种方式丢失了扩展名。如果我手动添加扩展名(编辑其名称),则可以在浏览器中正确加载

我正在尝试使用以下代码:

$directory = "http://www.example.com/MyFolder/";
if ($handle = opendir($directory)) { 
    while (false !== ($fileName = readdir($handle))) {   

        if($fileName['extension'] == ""){

            $fileName = $fileName.".gif";
        }
        rename($directory . $fileName, $directory . $newName);
    }
    closedir($handle);
}

2 个答案:

答案 0 :(得分:1)

不幸的是,由于您不能将preg_grep传递到array_walk中,因此必须像这样分割,否则可能只是一行。

$dir='./MyFolder/';
$col=preg_grep( '@^((?!gif).)*$@i', glob( $dir . '*' ) );

array_walk( $col , function($f){
    rename( $f, $f.'.gif' );
});

或者是原始版本的修改版本

if( $handle = opendir( $directory ) ) { 
    while( false !== $filename = readdir( $handle ) ) {
        if( !is_dir( $filename ) ) {
            $file = $directory . $filename;
            if( empty( pathinfo( $file, PATHINFO_EXTENSION ) ) ){
                rename( $file, $file . '.gif' );
            }
        }
    }
    closedir($handle);
}

由于上面的原始文件以gif以外的扩展名愉快地重命名了文件,所以没有错误的正则表达式的更简单的版本似乎可以正常工作。

$dir='c:/temp/fileuploads/1/';
$col=glob( $dir . '*' );

array_walk( $col, function( $f ){
    if( empty( pathinfo( $f, PATHINFO_EXTENSION ) ) ){
        printf('%s - %s<br />',$f,$f.'.gif');
        rename( $f, $f.'.gif' );
    }
});

答案 1 :(得分:0)

检测到丢失的扩展名后,请更改您的重命名以添加.gif。您当前的代码正在使用一个不存在的变量$newname

while (false !== ($fileName = readdir($handle))) {   

        if($fileName['extension'] == ""){
           rename($directory . $fileName, $directory . $fileName . '.gif');
        }
}