2009-08-04 61 views
1

我已經在我的服務器上獲得了名稱中有空格的文件。我想用下劃線對它們進行重命名。我試過在空間前放一個斜線,我試着用%20替換空格。仍然PHP給我:使用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++]); 
} 

回答

2

確定,如果你不嘗試重命名的沒有這樣的文件錯誤不會發生?調試時的第一步是簡化問題,直至不再有問題。

我不知道你是否這樣做,因爲它起初並不工作,但你絕對不應該使用本地文件名上的rawurlencode(),這是保證把事情搞砸。另外,我很好奇你在做什麼"(Dir) {$fname}" - 這似乎也是一個錯誤。我懷疑你就越有可能需要做的是:

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

你也應該知道,但是,什麼dir回報是文件名相對於目錄通過所以你需要確保你的is_dir()和重命名操作考慮到這一點。所以更可能你想說:重命名語句之前

print "$file\n"; 

看到你在說什麼:

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

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

我需要$ dir。'/'。謝謝! – Corey 2009-08-04 01:22:42

0

添加。

此外,你應該一個的strstr($ FNAME,'「)添加到您的if語句將文件添加到陣列之前,所以你只能在包含空格的文件名進行操作:

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

我用來生成一個快速的黑客清理一些非常糟糕的命名文件。這是我的代碼;如果你想使用它。

<?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"; 
    }