php rename () Устройство или ресурс занят - PullRequest
2 голосов
/ 26 декабря 2011

У меня есть код, который выдает следующую ошибку:

Внимание:

[function.rename]: устройство или ресурс занят в

if ($handle = opendir($temp_images)) {

        /* This is the correct way to loop over the directory. */
        while (false !== ($file = readdir($handle))) {
             if ($file == $file) {
             }
             $path = ''; 
             $dir_handle = opendir($path);
             chdir($path);
             $oldfile = $path.$file ;
             $newfile = $path.preg_replace('/[\\&\\%\\$\\ ]+/', '-', $file); // replace &%$ with a - 

             if(FALSE == rename($oldfile, $newfile)) 
             {

             }

        }

       closedir($handle);
}

В чем проблема и как ее исправить?

Ответы [ 2 ]

2 голосов
/ 27 декабря 2011

если вы посмотрите на

man 2 rename 

или http://linux.die.net/man/2/rename

, вы увидите

EBUSY - переименование не выполняется из-за oldpath или newpathкаталог, который используется каким-либо процессом (возможно, как текущий рабочий каталог, или как корневой каталог, или потому что он был открыт для чтения) или используется системой (например, как точка монтирования), в то время как система считает этоошибка.(Обратите внимание, что в таких случаях нет необходимости возвращать EBUSY - в любом случае нет ничего плохого в том, чтобы переименовывать, - но разрешено возвращать EBUSY, если система не может иначе обработать такие ситуации.)

просто напечатайте вывод того, что вы пытаетесь переименовать, и вы увидите, что происходит

0 голосов
/ 28 мая 2019

Попробуйте исключить '.' и '..'.

if($file == '.' || $file == '..') {
    continue;
}

Это работает для меня. Надеюсь, это будет работать для вас. Спасибо

...