문제

이미 내 서버에있는 이름에 공백이있는 파일이 있습니다. 밑줄로 이름을 바꾸고 싶습니다. 나는 공간 앞에 슬래시를 넣으려고 시도했고, 공간을 %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";

당신이 얻는 것을보기 위해 이름을 바꾸기 전에.

또한 파일을 배열에 추가하기 전에 if 문에 strstr ($ fname, '')를 추가하여 공간이 포함 된 파일 이름에서만 작동해야합니다.

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