使用PHP重命名带空格的文件

时间:2009-08-04 01:02:10

标签: php rename filenames spaces

我的名字中有空格的文件已存在于我的服务器上。我想用下划线重命名它们。我试过在空格前放一个斜线,我试着用%20替换空格。 PHP还是给了我:

  

没有这样的文件或目录。

这是我的代码:

$dir = './';
$dhandle = opendir($dir);
$old_files = array();

if ($dhandle) {
    while (false !== ($fname = readdir($dhandle)))
    {
        if ( ($fname != '.') && ($fname != '..') )
        {
            $old_files[] = (is_dir( "./$fname" )) ? "(Dir) {$fname}" : $fname;
        }
    }
    closedir($dhandle);
}

$new_files = str_replace(' ', '_', $old_files);
$x = 0;
foreach($old_files as $file)
{
    rename(rawurlencode($file), $new_files[$x++]);
}

3 个答案:

答案 0 :(得分:2)

如果不尝试重命名,是否确定没有发生此类文件错误?调试的第一步是简化问题,直到它不再有错误。

我不知道你是否这样做是因为它一开始没有工作,但你绝对不应该在本地文件名上使用rawurlencode(),这肯定会搞砸了。另外,我很好奇你在使用"(Dir) {$fname}"做了什么 - 这似乎也是一个错误。我怀疑你想做的更有可能是:

if ( ($fname != '.') && ($fname != '..') && !is_dir("./$fname" )) 
{
  $old_files[] = $fname;
}

但是,您还应该意识到,dir返回的是与传递的目录相关的文件名 ,因此您需要确保is_dir()和重命名操作采用考虑到了。所以你很可能想说:

is_dir($dir.'/'.$fname);

rename($dir.'/'.$file,$dir.'/'.$new_files[$x++]);

答案 1 :(得分:1)

添加:

print "$file\n";

在重命名语句之前,看看你得到了什么。

另外,在将文件添加到数组之前,应该在if语句中添加一个strstr($ fname,''),这样你才能对包含空格的文件名进行操作:

if ( ($fname != '.') && ($fname != '..') && !is_dir("./$fname" ) && strstr($fname, ' ')) 
{
  $old_files[] = $fname;
}

答案 2 :(得分:1)

我曾经生成一个快速的黑客来清理一些非常糟糕的文件。这是我的代码;如果你愿意,可以使用它。

<?php
    $dir = './';
    $dhandle = opendir($dir);
    $old_files = array();

    if ($dhandle) {
    while (false !== ($fname = readdir($dhandle))) {
        if ( ($fname != '.') && ($fname != '..') && !is_dir("./$fname" ))
             $old_files[] = $fname;
       }
       closedir($dhandle);
    }

    foreach($old_files as $file)
    {
        $new_name = str_replace(',', '', str_replace('&', '', str_replace(' ','',$file)));
        rename("./".$file, "./".$new_name);
        echo $new_name."\n";
    }