У меня есть код, который дает следующую ошибку:
Предупреждение:
[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); }
В чем проблема и как это исправить?
если вы посмотрите на
man 2 rename
или http://linux.die.net/man/2/rename
ты увидишь
EBUSY – переименование не выполняется, потому что oldpath или newpath – это каталог, который используется каким-то процессом (возможно, в качестве текущего рабочего каталога или в качестве корневого каталога или потому, что он открыт для чтения) или используется системой (например, как точка монтирования), в то время как система считает это ошибкой. (Обратите внимание, что нет необходимости возвращать EBUSY в таких случаях – нет ничего плохого в том, чтобы делать переименование в любом случае, но разрешено возвращать EBUSY, если система не может иначе обрабатывать такие ситуации.)
просто напечатайте вывод, что вы пытаетесь переименовать, и вы увидите, что происходит