2009-08-04 11 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()を確認し、操作の名前を変更する必要があるので、を通過したファイル名であること、しかし、実現すべきである:私はある可能性が高いあなたが何をしたいのか疑いますそれを考慮に入れてください。可能性が高いので、より多くのあなたが言いたい:

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

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

私は$ dir。/が必要でした。ありがとう! – Corey

0

追加:

print "$file\n"; 

リネーム文の前に、あなたが取得しているかを確認します。

また、あなたはあなただけのスペースを含むファイル名で動作するように、配列にファイルを追加する前に、あなたのif文にはstrstr($ fnameのを、 '「)を追加する必要があります

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"; 
    } 
関連する問題