Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Про файлы
 
 автор: pashen   (11.05.2005 в 13:02)   письмо автору
 
 

Господа профи! Подскажите пожалуйста, возможен ли скрипт на PHP, который бы
при выполнении на хосте удалял файлы, скажем месячной
давности, например по конкретному числу создания файлов. И
скрипт, который бы показывал кол-во файлов в каталоге (кол-во
сообщений в гостевой)?
Спасибо за ответы!!!! С уважением.

   
 
 автор: cheops   (11.05.2005 в 13:17)   письмо автору
 
   для: pashen   (11.05.2005 в 13:02)
 

Да, это вполне реально. Так решение, подсчитвающее число файлов в директории, приведно по теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3079
Удаление файлов будет иметь практически аналогичный код, только вместо увеличения счётчика, необходимо поставить проверку на время создания файла
<?php 
  $count 
0
  
// Открываем директорию records 
  
$dir opendir("records"); 
  
// В цикле выводим её содержимое 
  
while (($file readdir($dir)) !== false
  { 
     if(
$file != "." && $file != ".." && filectime($file) < time() - 3600*24*7unlink($file); 
  } 
  
// Закрываем директорию 
  
closedir($dir); 
?> 

Так, в скрипте уничтажаются файлы, недельной давности.

   
 
 автор: pashen   (11.05.2005 в 14:08)   письмо автору
 
   для: cheops   (11.05.2005 в 13:17)
 

Большое спасибо!

   
 
 автор: babilonian   (09.08.2005 в 13:09)   письмо автору
 
   для: pashen   (11.05.2005 в 14:08)
 

А если в данном случае сервер выдает вот это:
Warning: filectime() [function.filectime]: stat failed for 080905010512.txt in C:\Work\Internet\cards\1.php on line 8

Warning: unlink(080905010512.txt) [function.unlink]: No such file or directory in C:\Work\Internet\cards\1.php on line 8

   
 
 автор: cheops   (09.08.2005 в 13:18)   письмо автору
 
   для: babilonian   (09.08.2005 в 13:09)
 

Ну да... нужно поправить чуть-чуть
<?php 
  $count 
0
  
// Открываем директорию records 
  
$dir opendir("records"); 
  
// В цикле выводим её содержимое 
  
while (($file readdir($dir)) !== false
  { 
     if(
$file != "." && $file != ".." && filectime("records/".$file) < time() - 3600*24*7unlink("records/".$file); 
  } 
  
// Закрываем директорию 
  
closedir($dir); 
?>

   
 
 автор: babilonian   (09.08.2005 в 13:58)   письмо автору
 
   для: cheops   (09.08.2005 в 13:18)
 

Проглядел. Спасибо!

   
 
 автор: babilonian   (09.08.2005 в 14:10)   письмо автору
 
   для: cheops   (09.08.2005 в 13:18)
 

Дык а, сносит все файлы. Выдает ошибку
Warning: filectime() [function.filectime]: stat failed for 080905140545.txt in C:\Work\Internet\cards\1.php on line 8
и после обновления сносит все себе приспокойненько (возраст фала в названии)

   
 
 автор: cheops   (09.08.2005 в 16:31)   письмо автору
 
   для: babilonian   (09.08.2005 в 14:10)
 

Хм... т.е. получается, что только после второго запуска удаляются все файлы или скрипт работает, но выводит предупреждение?

   
 
 автор: babilonian   (10.08.2005 в 01:39)   письмо автору
 
   для: cheops   (09.08.2005 в 16:31)
 

При первом запуске он выводит эту ошибку, а при обновлении страницы с ошибкой выводит пустоту и сносит только что созданные файлы (двух минут не прошло, не то что недели!)

   
 
 автор: Akira   (10.08.2005 в 02:40)   письмо автору
 
   для: cheops   (09.08.2005 в 13:18)
 

http://softtime.ru/forum/read.php?id_forum=1&id_theme=6025&page=4
проглядели?

   
 
 автор: cheops   (10.08.2005 в 12:58)   письмо автору
 
   для: Akira   (10.08.2005 в 02:40)
 

А чего-то ничего не вижу криминального там :)))...

   
 
 автор: babilonian   (10.08.2005 в 17:35)   письмо автору
 
   для: cheops   (10.08.2005 в 12:58)
 

Получается этот скрипт не жизнеспособен?

   
 
 автор: babilonian   (10.08.2005 в 17:34)   письмо автору
 
   для: Akira   (10.08.2005 в 02:40)
 

Не в этом дело. Просто здесь нужен какой-то очень простой скрипт, чтобы инклудировать его на индекс.пхп и при входе любого пользователя проверять папку на наличие старых файлов.

   
 
 автор: cheops   (10.08.2005 в 18:17)   письмо автору
 
   для: babilonian   (10.08.2005 в 17:34)
 

А как у вас расположен скрипт относительно директории records, или что там стоит вместо него - приведите ваш адаптированный вариант?

   
 
 автор: babilonian   (10.08.2005 в 19:38)   письмо автору
 
   для: cheops   (10.08.2005 в 18:17)
 

Так точно. Дело в расположении каталогов. Попробовал перенести файл со скриптом в каталог с файлами, кот надо удалять. выставил путь типа "../records/", и все заработало. скрипт удалил все что нужно, в том числе и себя. Но как тогда правильно выставлять путь к нужному каталогу. Попробовал полный путь - непруха. Что же делать???

   
 
 автор: cheops   (11.08.2005 в 00:47)   письмо автору
 
   для: babilonian   (10.08.2005 в 19:38)
 

По идеи если файл расположен на в той же директории, что и records то вместо "../records/" достаточно указать "records/"

   
 
 автор: babilonian   (11.08.2005 в 13:11)   письмо автору
 
   для: cheops   (11.08.2005 в 00:47)
 

Ой не знаю уж что делать. Перепробовал все варианты вплоть до полного пути. Может проблема в настройках php.ini?

   
 
 автор: cheops   (11.08.2005 в 18:56)   письмо автору
 
   для: babilonian   (11.08.2005 в 13:11)
 

Хм... да вроде нет там ничего такого... а функция realpath ничего не даёт в вашем случае?

   
 
 автор: ae212   (11.08.2005 в 22:13)   письмо автору
 
   для: babilonian   (10.08.2005 в 19:38)
 

Неделю назад нужно было как всегда срочно забацать архивариуса на заявки
по расходным материалам. Не долго думая (минуты 1,5), взял первое, что
попалось под руку (а попался многообсуждаемый здесь :) скрипт подсчета
строк), отрубил лишнее (даже не все), добавил нужное и засунул в скрипт, который ежедневно чистит tmp. Скрипт лежит в корне, records - директория
под зачистку. Проверял в трех местах, работает везде. Попробуйте.

<?
$server_time 
time()+$server_time;
function 
old_files($dirname
{empty(
$dirname) ? $dirname "records" $dirname $dirname."/*"
    
$dir glob($dirname); 
    if (
$dir
    { 
        foreach(
$dir as $file
        { 
            if (
is_file($file)) 
            {
$df=date("d.m.Y H:i:s"filectime($file));
if(
$file != "." && $file != ".." && filectime($file) < time() - 

60*60*24*7) {unlink($file); print $file." - (".$df.") - благополучно 

снесен!<br>"
;} else {print $file." - (".$df.") - жив, курилка!<br>";}
            } 
            if (
is_dir($file)) 
            { 
                
old_files($file); 
            } 
        } 
    } 

old_files("");
?> 

Удачи.

   
 
 автор: babilonian   (12.08.2005 в 18:26)   письмо автору
 
   для: ae212   (11.08.2005 в 22:13)
 

Не поверите, работает!!! Только вот вопрос остался. какого... некоторые команды себя так ведут как в предыдущем варианте скрипта?

   
 
 автор: ae212   (13.08.2005 в 03:30)   письмо автору
 
   для: babilonian   (12.08.2005 в 18:26)
 

babilonian, вопрос снят. Я, студент с 20-летним стажем, давно так над
собой не смеялся. Час (принципиально уже) пялился в 13 строчек кода
Cheops'a, половина из которых комментс, чтобы увидеть, что не
filectime($file) < time нужно, а filectime("records/".$file) < time.
Причём в середине топика чёрным по серому эта фишка исправлена в unlink()
:) В общем, чудес на свете не бывает, а грабли сколько в сторону не
убирай..... Удачи.

   
 
 автор: cheops   (13.08.2005 в 03:59)   письмо автору
 
   для: ae212   (13.08.2005 в 03:30)
 

С обходом директорий всегда так самая распространённая ошибка... поправлю, чтобы те кто будут читать тему позже могли воспользоваться рабочим кодом.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования