Абсолютный путь к файлу и unlink

Тема в разделе "PHP", создана пользователем Matinier, 20 июл 2011.

Модераторы: latteo
  1. Matinier

    Matinier Постоялец

    Регистр.:
    5 окт 2009
    Сообщения:
    65
    Симпатии:
    4
    День добрый!
    Проблема в следующем: пытаюсь удалить файл функцией unlink указывая в качестве аргумента абсолютный путь.
    В итоге получаю:

    WARNING: unlink(/var/www/site/site.ua/_megafolder/data/4057t.html) [<a href='function.unlink'>function.unlink</a>]: No such file or directory in /var/www/site/site.ua/_megafolder/class.my.php on line 169

    Файл в папке лежит. Права 666. Safe mod отключен.
    В чем же проблема?
     
  2. gres_18

    gres_18 Pythonобандерівець®

    Регистр.:
    26 апр 2009
    Сообщения:
    407
    Симпатии:
    206
    Права 666 на файл только? А на родительскую папку data какие права стоят?
     
  3. Matinier

    Matinier Постоялец

    Регистр.:
    5 окт 2009
    Сообщения:
    65
    Симпатии:
    4
    Права на родительскую папку: 777
     
  4. gres_18

    gres_18 Pythonобандерівець®

    Регистр.:
    26 апр 2009
    Сообщения:
    407
    Симпатии:
    206
    Тогда попробуй chdir использовать перед unlink:

    PHP:
    <?php
        $old 
    getcwd(); // текущий каталог
        
    chdir($path_to_file);
        
    unlink($filename);
        
    chdir($old); // восстанавливаем каталог 
    ?>
     
  5. Matinier

    Matinier Постоялец

    Регистр.:
    5 окт 2009
    Сообщения:
    65
    Симпатии:
    4
    То есть пояснить почему unlink с абсолютным путем не работает никто не может?
     
  6. gres_18

    gres_18 Pythonобандерівець®

    Регистр.:
    26 апр 2009
    Сообщения:
    407
    Симпатии:
    206
    Вот только что проверил - у меня файл удаляется. Права на папку 777 владелец не www-data, на файл 666 владелец вообще root. Не видя текст скрипта полностью сложно сказать что происходит. Может ты файл не закрываешь перед удалением, может еще что...
     
  7. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    дык текст ошибки говорит о том что неверный путь или файл не существует ... => скорее всего путь то и неверный ..

    отталкивайтесь от пути полученного к примеру таким образом
    ну и там че-то добавьте/обрежте по мере необходимости вложенности
    PHP:
    print_R(dirname(__FILE__)); 
     
  8. Matinier

    Matinier Постоялец

    Регистр.:
    5 окт 2009
    Сообщения:
    65
    Симпатии:
    4
    Вот кусок кода, который вызывает WARNING:

    PHP:
    $op_dir opendir($this->_dbPath.'/');
    while (
    $file readdir($op_dir)) {
        if ( (
    strcmp(substr($file,-5),'.html') == 0) && is_file($this->_dbPath.'/'.$file) ) {
            
    unlink($this->_dbPath.'/'.$file);
        }
    }
    closedir($op_dir);
    $this->_dbPath содержит абсолютный путь к родительской папке.
    Как видно из кода перед unlink делается проверка на существование файла, т.е. файл таки существует и путь правильный.
    В чем проблема?

    P.S.: Да, я в курсе, что все это можно сделать просто через glob. Это не мой код, но мне надо исправить указанную в топике ошибку.
     
  9. Mark666

    Mark666 Писатель

    Регистр.:
    3 окт 2007
    Сообщения:
    6
    Симпатии:
    2
    Дело в том, что $this->_dbPath содержит относительный путь и при этом раскладе функции opendir, is_file будут вести себя вполне положительно, за исключением функции unlink
     
  10. Matinier

    Matinier Постоялец

    Регистр.:
    5 окт 2009
    Сообщения:
    65
    Симпатии:
    4
    Добавлено через 2 минуты
    Посты набиваете?
    Написал же, что $this->_dbPath содержит абсолютный путь.
    Вопрос остается открытым.