Php: добавить расширение для всех файлов без расширения в папке - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть папка с именем 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 голосов
/ 13 февраля 2019

К сожалению, потому что вы не можете передать preg_grep в array_walk, это пришлось разделить следующим образом, иначе это могла бы быть одна строка.

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

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

Или модифицированная версияoriginal

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' );
    }
});
0 голосов
/ 13 февраля 2019

Измените свое переименование, чтобы добавить расширение .gif после того, как вы обнаружите, что оно отсутствует.Ваш текущий код использовал переменную $newname, которая не существовала.

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

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