我有一个名为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);
}
不幸的是因为你不能将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
扩展名。您当前的代码使用的是不存在的变量$newname
。
while (false !== ($fileName = readdir($handle))) {
if($fileName['extension'] == ""){
rename($directory . $fileName, $directory . $fileName . '.gif');
}
}