|
|
|
| Господа профи! Подскажите пожалуйста, возможен ли скрипт на PHP, который бы
при выполнении на хосте удалял файлы, скажем месячной
давности, например по конкретному числу создания файлов. И
скрипт, который бы показывал кол-во файлов в каталоге (кол-во
сообщений в гостевой)?
Спасибо за ответы!!!! С уважением. | |
|
|
|
|
|
|
|
для: 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*7) unlink($file);
}
// Закрываем директорию
closedir($dir);
?>
|
Так, в скрипте уничтажаются файлы, недельной давности. | |
|
|
|
|
|
|
|
для: cheops
(11.05.2005 в 13:17)
| | Большое спасибо! | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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*7) unlink("records/".$file);
}
// Закрываем директорию
closedir($dir);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(09.08.2005 в 13:18)
| | Проглядел. Спасибо! | |
|
|
|
|
|
|
|
для: 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
и после обновления сносит все себе приспокойненько (возраст фала в названии) | |
|
|
|
|
|
|
|
для: babilonian
(09.08.2005 в 14:10)
| | Хм... т.е. получается, что только после второго запуска удаляются все файлы или скрипт работает, но выводит предупреждение? | |
|
|
|
|
|
|
|
для: cheops
(09.08.2005 в 16:31)
| | При первом запуске он выводит эту ошибку, а при обновлении страницы с ошибкой выводит пустоту и сносит только что созданные файлы (двух минут не прошло, не то что недели!) | |
|
|
|
|
|
|
|
|
для: Akira
(10.08.2005 в 02:40)
| | А чего-то ничего не вижу криминального там :)))... | |
|
|
|
|
|
|
|
для: cheops
(10.08.2005 в 12:58)
| | Получается этот скрипт не жизнеспособен? | |
|
|
|
|
|
|
|
для: Akira
(10.08.2005 в 02:40)
| | Не в этом дело. Просто здесь нужен какой-то очень простой скрипт, чтобы инклудировать его на индекс.пхп и при входе любого пользователя проверять папку на наличие старых файлов. | |
|
|
|
|
|
|
|
для: babilonian
(10.08.2005 в 17:34)
| | А как у вас расположен скрипт относительно директории records, или что там стоит вместо него - приведите ваш адаптированный вариант? | |
|
|
|
|
|
|
|
для: cheops
(10.08.2005 в 18:17)
| | Так точно. Дело в расположении каталогов. Попробовал перенести файл со скриптом в каталог с файлами, кот надо удалять. выставил путь типа "../records/", и все заработало. скрипт удалил все что нужно, в том числе и себя. Но как тогда правильно выставлять путь к нужному каталогу. Попробовал полный путь - непруха. Что же делать??? | |
|
|
|
|
|
|
|
для: babilonian
(10.08.2005 в 19:38)
| | По идеи если файл расположен на в той же директории, что и records то вместо "../records/" достаточно указать "records/" | |
|
|
|
|
|
|
|
для: cheops
(11.08.2005 в 00:47)
| | Ой не знаю уж что делать. Перепробовал все варианты вплоть до полного пути. Может проблема в настройках php.ini? | |
|
|
|
|
|
|
|
для: babilonian
(11.08.2005 в 13:11)
| | Хм... да вроде нет там ничего такого... а функция realpath ничего не даёт в вашем случае? | |
|
|
|
|
|
|
|
для: 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("");
?>
|
Удачи. | |
|
|
|
|
|
|
|
для: ae212
(11.08.2005 в 22:13)
| | Не поверите, работает!!! Только вот вопрос остался. какого... некоторые команды себя так ведут как в предыдущем варианте скрипта? | |
|
|
|
|
|
|
|
для: babilonian
(12.08.2005 в 18:26)
| | babilonian, вопрос снят. Я, студент с 20-летним стажем, давно так над
собой не смеялся. Час (принципиально уже) пялился в 13 строчек кода
Cheops'a, половина из которых комментс, чтобы увидеть, что не
filectime($file) < time нужно, а filectime("records/".$file) < time.
Причём в середине топика чёрным по серому эта фишка исправлена в unlink()
:) В общем, чудес на свете не бывает, а грабли сколько в сторону не
убирай..... Удачи. | |
|
|
|
|
|
|
|
для: ae212
(13.08.2005 в 03:30)
| | С обходом директорий всегда так самая распространённая ошибка... поправлю, чтобы те кто будут читать тему позже могли воспользоваться рабочим кодом. | |
|
|
|