【问题标题】:Php: append extension to all files with no extension in a folderPhp:将扩展名附加到文件夹中没有扩展名的所有文件
【发布时间】:2019-07-07 09:56:38
【问题描述】:

我有一个名为 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);
}

【问题讨论】:

  • 看起来很简单——什么代码导致了问题?
  • 注意:如果它们还没有,那当然不会使它们成为 gif 图像(我知道,这似乎很明显,但可能值得注意)。
  • @RamRaider 我添加了我尝试使用的代码。
  • @CD001 这些文件是 gif 文件,但不知何故它们丢失了扩展名。如果我手动添加扩展(编辑其名称),那么我可以在浏览器中正确加载。
  • @JPashs - 只是确保;)我个人会glob它。

标签: php append


【解决方案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' );
    }
});

【讨论】:

  • 我可以工作,但该函数会将“.gif”添加到所有文件中,即使它们具有扩展名。然后,将“file.xml”重命名为“file.xml.gif”。我只需要将“.gif”添加到名称不带扩展名的文件中。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 2016-12-24
    • 2013-11-03
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    相关资源
    最近更新 更多