PHP рекурсивная функция удаления выдает предупреждение - PullRequest
2 голосов
/ 08 октября 2011

Моя функция очистки выглядит так.

function cleanUp($exdirs, $exfiles){
$it = new RecursiveIteratorIterator(
  new RecursiveDirectoryIterator('.'), 
  RecursiveIteratorIterator::CHILD_FIRST
);
foreach($it as $entry) {
  if ($entry->isDir() && !in_array($entry->getBasename(), $exdirs)) {
    try {
      rmdir($entry->getPathname());
    }
    catch (Exception $ex) {
      // dir not empty
    }
  }
  elseif (!in_array($entry->getFileName(), $exfiles)) {
    unlink($entry->getPathname());
  }
}
}

И вызывая эту функцию вот так

$excludeDirsNames = array('cgi-bin');
$excludeFileNames = array('ws.zip');
cleanUp($excludeDirsNames , $excludeFileNames);

Теперь проблема в том, что я получаю предупреждение. can not unlink cgi-bin on line unlink($entry->getPathname());

Что не так с моей функцией? Как решить эту проблему?

1 Ответ

2 голосов
/ 08 октября 2011

Я предполагаю, что cgi-bin это символическая ссылка, а не обычный каталог. Вот почему он попадает в раздел "unlink". Сообщение об ошибке, вероятно, связано с разрешениями.

Исправление, переместите 'cgi-bin' в массив $ excludeFileNames.

...