Помогите с одной штукой.

Тема в разделе "PHP", создана пользователем event, 28 сен 2011.

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

    event Создатель

    Регистр.:
    26 июл 2011
    Сообщения:
    19
    Симпатии:
    2
    Доброй ночи !
    Ребята есть такой скрипт:
    PHP:
    <?


    require_once(
    "include/bittorrent.php");
    dbconn();
    loggedinorreturn();
    stdhead();
    if (
    get_user_class() < UC_MODERATOR) {
    stderr($tracker_lang['error'], $tracker_lang['access_denied']);
    die();
    }

    //ini_set('display_errors', 'On'); 

    $ar_tmd = array("png","gif","jpg","jpeg");

    if(
    $handle opendir('cache/'))
    {
    while(
    false !== ($file readdir($handle)))
    if(
    $file != "." && $file != ".."unlink('cache/'.$file);
    closedir($handle);
    stdmsg("Готово""Очистка кеша завершена успешно.");
    }
    else {
    stderr("Ошибка""Очистка кеша не завершена.");
    }

    $df = @disk_free_space(ROOT_PATH);
    $dt = @disk_total_space(ROOT_PATH);

    stderr("Всего места на сервере: ".mksize($dt).", свободного места: ".mksize($df));

    stdfoot();


    ?>


    Он полностью чистит папку cache, как сделать так чтобы он чистил в папке файлы только с расширением .txt?

    Спасибо за внимание, буду благодарен за помощь. :)
     
  2. coguar

    coguar Постоялец

    Регистр.:
    4 авг 2007
    Сообщения:
    61
    Симпатии:
    11
    PHP:
    <?


    require_once(
    "include/bittorrent.php");
    dbconn();
    loggedinorreturn();
    stdhead();
    if (
    get_user_class() < UC_MODERATOR) {
    stderr($tracker_lang['error'], $tracker_lang['access_denied']);
    die();
    }

    //ini_set('display_errors', 'On'); 

    $ar_tmd = array("png","gif","jpg","jpeg");

    if(
    $handle opendir('cache/'))
    {
    while(
    false !== ($file readdir($handle)))
    if(
    $file != "." && $file != ".." && substr_count($file,'.txt')>=1unlink('cache/'.$file);
    closedir($handle);
    stdmsg("Готово""Очистка кеша завершена успешно.");
    }
    else {
    stderr("Ошибка""Очистка кеша не завершена.");
    }

    $df = @disk_free_space(ROOT_PATH);
    $dt = @disk_total_space(ROOT_PATH);

    stderr("Всего места на сервере: ".mksize($dt).", свободного места: ".mksize($df));

    stdfoot();


    ?> 
    Что изменилось:

    PHP:
    if($file != "." && $file != ".." && substr_count($file,'.txt')>=1unlink('cache/'.$file);
     
  3. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    так а если '.txt' в имени файла, а не расширение? например, 'vasya.txt.log'
    может все-таки лучше:
    PHP:
    strtolower(substr($file,-4))=='.txt'
     
  4. coguar

    coguar Постоялец

    Регистр.:
    4 авг 2007
    Сообщения:
    61
    Симпатии:
    11
    Мой способ будет работать в обоих случаях. Учите матчасть.

    У меня целый движок построен с нуля на таких вот поисках "в тексте" и работает как часы.
     
  5. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    О том и речь, что будет работать в обоих случаях, а нужно
    Читайте внимательнее задание.
     
  6. coguar

    coguar Постоялец

    Регистр.:
    4 авг 2007
    Сообщения:
    61
    Симпатии:
    11
    В задании четко сказано удалить все файлы .txt

    В задании не сказано, например

    есть .txt, .txt.log и другие файлы
    и надо удалить только .txt, не удаляя лог

    Это вы читайте внимательнее. Мое решение полностью удовлетворяет запросу.

    И еще, от правильности поставленного вопроса зависит подход, так что я думаю нет смысла дальше спорить, оба варианта будут работать, ваш чуть точнее. в этом и вся разница.
     
  7. }I{eka

    }I{eka Постоялец

    Регистр.:
    7 июн 2011
    Сообщения:
    81
    Симпатии:
    34
    У файлов .txt.log, расширение - log


    как вариант, можно еще так делать
    PHP:
    if($file != "." && $file != ".." && end(explode("."$file)) == "txt"unlink('cache/'.$file);