Boroda aka Hamster (fantaseour) wrote,
Boroda aka Hamster
fantaseour

Category:

SPL DirectoryIterator и удаление директорий

Время от времени вылезают тонкости с тем, что директория не закрывается после пробегания по ней с помощью SPL-итераторов.

Довольно неочевидный вариант проявления эффекта описан в разделе багов на сайте php:
http://bugs.php.net/bug.php?id=42948

Но это не мой случай.

В моем случае вот такой код вызывал блокировку и не возможность удалить директорию

<?php
$it
=new DirectoryIterator($myDir);
foreach(
$it as $fileItem){
  if(
$fileItem->isFile() && preg_match('/^\d{3}.*\.php$/',$fileItem)) {
    
$this->migrations[]=(string) $fileItem;
  }
}

Всему виной явная подстановка значения итератора $fileItem в вызов функции preg_match. Казалось бы должно было сработать приведение к строковому виду и все. Но видимо где-то остается ссылка на объект и он не уничтожается по выходе из метода.

Простое присваивание решает проблему:

<?php
$it
=new DirectoryIterator($myDir);
foreach(
$it as $fileItem){
  
$fileName=(string) $fileItem;
  if(
$fileItem->isFile() && preg_match('/^\d{3}.*\.php$/',$fileName)) {
    
$this->migrations[]=$fileName;
  }
}
Tags: development, php
Subscribe

  • Так. Чуть не бросил дневник :)

    Ну вот, хотел не бросать и опять сюда не пишу :( Потому, что в будние дни сил нет писать, а в выходные вот то у меня ДР, то у пасынка. То просто…

  • 46

    Дня рожденья пост. Ну ничего, мы еще позажигаем :)

  • (no subject)

    Я очень люблю конференции. Они зажигают в разработчике свечечку, которую он потом бережно несет в себе через весь год! Когда-то давно, я с завистью…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments