我在他们的名字是已经是我的服务器上得到了与空格的文件。我想他们用下划线重命名。我试图把一个斜线的空间之前,我已经试过%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++]);
}
有帮助吗?

解决方案

您知道,如果你不尝试重命名的没有这样的文件错误不会发生?调试时良好的第一步是为了简化问题,直到它不再马车。

我不能告诉你,如果这样做,因为它没有在第一或不能正常工作,但你绝对不应该使用一个本地文件名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++]);

其他提示

添加:

print "$file\n";

在重命名声明看你在说什么。

此外,你应该一个的strstr($ FNAME,'“)添加到您的if语句添加文件到阵列之前,所以你只能在包含空格的文件名进行操作:

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

我用来生成一个快速的黑客清理一些非常严重命名的文件。这里是我的代码;如果你想使用它。

<?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";
    }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top