Необходима утилита для осмысленного удаления файлов из папки UPLOADS, т.е. чтобы можно было определить к какому сообщению принадлежит файл и может удалить вместе/или без сообщения (исправить сообщение, чтобы не было ссылки на файл)
Обсуждалось здесь
1. 1Bot - 22 октября 2009 — 19:14 - перейти к сообщению
2. M-A-X - 16 ноября 2009 — 01:43 - перейти к сообщению
Нужна версия с БД.
Там можно запросик сделать
Там можно запросик сделать
3. 1Bot - 3 октября 2011 — 17:49 - перейти к сообщению
Для безопасности рекомендую проверить каждому свой форум на наличие не связанных с сообщениями файлов в папке/UPLOADS.
Скрипт нужно залить в корень форума и вызвать в браузере.
upload-list.php
Скрипт нужно залить в корень форума и вызвать в браузере.
upload-list.php
CODE:
<?php
/**************************************************************************
Поиск файлов в папке uploads форума ExBB FM 1.0 RC1, которые не связаны
с сообщениями в темах
(c) 1Bot aka Strobe, 2011
**************************************************************************/
echo <<<DATA
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=win1251">
<meta http-equiv="Content-Language" content="ru">
</head>
<body>
DATA;
// 1. пройти по всем форумам и считать имена файлов вложений
$linkfiles = array();
$reflink = array();
$df = @opendir('.');
if ($df) {
while(false !== ($f = readdir($df))) {
if ('.' == $f | '..' == $f | !is_dir($f) | 'FORUM' !== strtoupper(substr($f,0,5))) continue;
// $f - папка форума
$dt = @opendir($f);
if ($dt) {
while (false !== ($t = readdir($dt))) {
if (is_dir($t) | 'THD.PHP' !== strtoupper(substr($t,-7,7))) continue;
// $t - файл темы
$t_attach = 'ATTACHES-'.substr($t,0,strlen($t)-8).'.PHP';
if (file_exists($t_a = "./$f/$t_attach")) { // у темы есть прикрепленные файлы
$fp = @fopen($t_a,'r')
or die("Could not read from the file <b>$t_a</b>");
flock($fp, 1);
$filesize = filesize($t_a);
$filesize = (0 === $filesize) ? 1:$filesize-8;
fseek($fp,8);
$str = fread($fp,$filesize);
flock($fp, 3);
fclose($fp);
$str = unserialize($str);
foreach ($str as $k => $v) {
$s = array(
'hits' => $v['hits'],
'size' => $v['size'],
'type' => $v['type'],
'file' => $v['file'],
'topic' => $f.'/'.$t);
$reflink[$v['id']] = $s;
$linkfiles[] = $v['id']; // имя прикрепленного файла в папке uploads
}
unset($str);
}
}
closedir($dt);
}
}
closedir($df);
}
// 2. считать список файлов из uploads
$upfiles = array();
$d = @opendir('uploads');
if ($d) {
while (false !== ($e = readdir($d))) {
if ($e == 'index.html' | is_dir($e)) continue;
$upfiles[] = $e;
}
closedir($d);
}
// 3. вывод имен несвязанных с сообщениями файлов
$count = 0;
$size = 0;
echo "<h2>Losted files</h2>\n";
echo "<table border=1 cellpadding=10>\n";
echo "<tr><th>Filename</th><th>Size (bytes)</th><th>Image</th></tr>\n";
foreach($upfiles as $file){
if (!in_array($file, $linkfiles)) {
$filesize = filesize("./uploads/$file");
echo "<tr><td>$file</td><td>$filesize</td><td> ";
if ('.EXT' !== strtoupper(substr($file,-4,4))) { // картинка
echo "<img src='./uploads/$file'>";
}
echo "</td></tr>\n";
$size += $filesize;
$count++;
}
}
echo "<tr><td>Total: $count file(s)</td><td>Total size: $size</td><td> </td></tr>\n";
echo '</table>';
echo <<<DATA
</body>
</html>
DATA;
?>
/**************************************************************************
Поиск файлов в папке uploads форума ExBB FM 1.0 RC1, которые не связаны
с сообщениями в темах
(c) 1Bot aka Strobe, 2011
**************************************************************************/
echo <<<DATA
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=win1251">
<meta http-equiv="Content-Language" content="ru">
</head>
<body>
DATA;
// 1. пройти по всем форумам и считать имена файлов вложений
$linkfiles = array();
$reflink = array();
$df = @opendir('.');
if ($df) {
while(false !== ($f = readdir($df))) {
if ('.' == $f | '..' == $f | !is_dir($f) | 'FORUM' !== strtoupper(substr($f,0,5))) continue;
// $f - папка форума
$dt = @opendir($f);
if ($dt) {
while (false !== ($t = readdir($dt))) {
if (is_dir($t) | 'THD.PHP' !== strtoupper(substr($t,-7,7))) continue;
// $t - файл темы
$t_attach = 'ATTACHES-'.substr($t,0,strlen($t)-8).'.PHP';
if (file_exists($t_a = "./$f/$t_attach")) { // у темы есть прикрепленные файлы
$fp = @fopen($t_a,'r')
or die("Could not read from the file <b>$t_a</b>");
flock($fp, 1);
$filesize = filesize($t_a);
$filesize = (0 === $filesize) ? 1:$filesize-8;
fseek($fp,8);
$str = fread($fp,$filesize);
flock($fp, 3);
fclose($fp);
$str = unserialize($str);
foreach ($str as $k => $v) {
$s = array(
'hits' => $v['hits'],
'size' => $v['size'],
'type' => $v['type'],
'file' => $v['file'],
'topic' => $f.'/'.$t);
$reflink[$v['id']] = $s;
$linkfiles[] = $v['id']; // имя прикрепленного файла в папке uploads
}
unset($str);
}
}
closedir($dt);
}
}
closedir($df);
}
// 2. считать список файлов из uploads
$upfiles = array();
$d = @opendir('uploads');
if ($d) {
while (false !== ($e = readdir($d))) {
if ($e == 'index.html' | is_dir($e)) continue;
$upfiles[] = $e;
}
closedir($d);
}
// 3. вывод имен несвязанных с сообщениями файлов
$count = 0;
$size = 0;
echo "<h2>Losted files</h2>\n";
echo "<table border=1 cellpadding=10>\n";
echo "<tr><th>Filename</th><th>Size (bytes)</th><th>Image</th></tr>\n";
foreach($upfiles as $file){
if (!in_array($file, $linkfiles)) {
$filesize = filesize("./uploads/$file");
echo "<tr><td>$file</td><td>$filesize</td><td> ";
if ('.EXT' !== strtoupper(substr($file,-4,4))) { // картинка
echo "<img src='./uploads/$file'>";
}
echo "</td></tr>\n";
$size += $filesize;
$count++;
}
}
echo "<tr><td>Total: $count file(s)</td><td>Total size: $size</td><td> </td></tr>\n";
echo '</table>';
echo <<<DATA
</body>
</html>
DATA;
?>
4. BON - 4 октября 2011 — 13:32 - перейти к сообщению
у меня там вообще кроме индесового файла нет ничего.
1Bot, хотите сказать что есть дырка и можно залить левый файл?
1Bot, хотите сказать что есть дырка и можно залить левый файл?
5. 1Bot - 4 октября 2011 — 19:44 - перейти к сообщению
BON пишет:
у меня там вообще кроме индексового файла нет ничего
Тогда Вам этот скрипт не пригодится.
BON пишет:
хотите сказать что есть дырка и можно залить левый файл?
Ситуация с лишними файлами в папке uploads скорее знакома тем, кто переходил с версий ExBB 1.9.1 на ExBB FM 1.0 RC1 - в ранних версиях иногда некоторые файлы вложений не отображались (обычно при разбиении темы пангинатором на страницы) и их приходилось дублировать для отображения => теперь их можно определить и удалить, чтобы освободить место на сервере.
6. roma1 - 16 марта 2012 — 08:00 - перейти к сообщению
хотел спросить, дело в том что удалено много тем которые не актуальны, но картинки прикреплённые средствами форума в папке аплоадс остались и сильно утяжеляют форум, я понял что при удалении темы картинка или прикрепленное фото не удаляется, папка раздута ненужными файлами, их выгребать руками дело длительное, что делать?
7. yura3d - 16 марта 2012 — 09:12 - перейти к сообщению
roma1 пишет:
хотел спросить, дело в том что удалено много тем которые не актуальны, но картинки прикреплённые средствами форума в папке аплоадс остались и сильно утяжеляют форум, я понял что при удалении темы картинка или прикрепленное фото не удаляется, папка раздута ненужными файлами, их выгребать руками дело длительное, что делать?
Прикреплённые файлы должны удаляться, если удаляется тема, в которую они прикреплены. Проверьте правильность расстановки прав доступа на файлы в папке uploads. Взял на контроль этот вопрос, сегодня вечером посмотрю
8. Леший - 7 апреля 2012 — 17:31 - перейти к сообщению
1Bot пишет:
у меня всё подряд показывает. И лишние картинки,и прикрученные к сообщениям. Для поиска лишних файлов использую это: Для безопасности рекомендую проверить каждому свой форум на наличие не связанных с сообщениями файлов в папке/UPLOADS.
Скрипт нужно залить в корень форума и вызвать в браузере.
upload-list.php
Скрипт нужно залить в корень форума и вызвать в браузере.
upload-list.php
CODE:
<?php
/**************************************************************************
Поиск файлов в папке uploads форума ExBB FM 1.0 RC1, которые не связаны
с сообщениями в темах
(c) 1Bot aka Strobe, 2011
**************************************************************************/
echo <<<DATA
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=win1251">
<meta http-equiv="Content-Language" content="ru">
</head>
<body>
DATA;
// 1. пройти по всем форумам и считать имена файлов вложений
$linkfiles = array();
$reflink = array();
$df = @opendir('.');
if ($df) {
while(false !== ($f = readdir($df))) {
if ('.' == $f | '..' == $f | !is_dir($f) | 'FORUM' !== strtoupper(substr($f,0,5))) continue;
// $f - папка форума
$dt = @opendir($f);
if ($dt) {
while (false !== ($t = readdir($dt))) {
if (is_dir($t) | 'THD.PHP' !== strtoupper(substr($t,-7,7))) continue;
// $t - файл темы
$t_attach = 'ATTACHES-'.substr($t,0,strlen($t)-8).'.PHP';
if (file_exists($t_a = "./$f/$t_attach")) { // у темы есть прикрепленные файлы
$fp = @fopen($t_a,'r')
or die("Could not read from the file <b>$t_a</b>");
flock($fp, 1);
$filesize = filesize($t_a);
$filesize = (0 === $filesize) ? 1:$filesize-8;
fseek($fp,8);
$str = fread($fp,$filesize);
flock($fp, 3);
fclose($fp);
$str = unserialize($str);
foreach ($str as $k => $v) {
$s = array(
'hits' => $v['hits'],
'size' => $v['size'],
'type' => $v['type'],
'file' => $v['file'],
'topic' => $f.'/'.$t);
$reflink[$v['id']] = $s;
$linkfiles[] = $v['id']; // имя прикрепленного файла в папке uploads
}
unset($str);
}
}
closedir($dt);
}
}
closedir($df);
}
// 2. считать список файлов из uploads
$upfiles = array();
$d = @opendir('uploads');
if ($d) {
while (false !== ($e = readdir($d))) {
if ($e == 'index.html' | is_dir($e)) continue;
$upfiles[] = $e;
}
closedir($d);
}
// 3. вывод имен несвязанных с сообщениями файлов
$count = 0;
$size = 0;
echo "<h2>Losted files</h2>\n";
echo "<table border=1 cellpadding=10>\n";
echo "<tr><th>Filename</th><th>Size (bytes)</th><th>Image</th></tr>\n";
foreach($upfiles as $file){
if (!in_array($file, $linkfiles)) {
$filesize = filesize("./uploads/$file");
echo "<tr><td>$file</td><td>$filesize</td><td> ";
if ('.EXT' !== strtoupper(substr($file,-4,4))) { // картинка
echo "<img src='./uploads/$file'>";
}
echo "</td></tr>\n";
$size += $filesize;
$count++;
}
}
echo "<tr><td>Total: $count file(s)</td><td>Total size: $size</td><td> </td></tr>\n";
echo '</table>';
echo <<<DATA
</body>
</html>
DATA;
?>
/**************************************************************************
Поиск файлов в папке uploads форума ExBB FM 1.0 RC1, которые не связаны
с сообщениями в темах
(c) 1Bot aka Strobe, 2011
**************************************************************************/
echo <<<DATA
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=win1251">
<meta http-equiv="Content-Language" content="ru">
</head>
<body>
DATA;
// 1. пройти по всем форумам и считать имена файлов вложений
$linkfiles = array();
$reflink = array();
$df = @opendir('.');
if ($df) {
while(false !== ($f = readdir($df))) {
if ('.' == $f | '..' == $f | !is_dir($f) | 'FORUM' !== strtoupper(substr($f,0,5))) continue;
// $f - папка форума
$dt = @opendir($f);
if ($dt) {
while (false !== ($t = readdir($dt))) {
if (is_dir($t) | 'THD.PHP' !== strtoupper(substr($t,-7,7))) continue;
// $t - файл темы
$t_attach = 'ATTACHES-'.substr($t,0,strlen($t)-8).'.PHP';
if (file_exists($t_a = "./$f/$t_attach")) { // у темы есть прикрепленные файлы
$fp = @fopen($t_a,'r')
or die("Could not read from the file <b>$t_a</b>");
flock($fp, 1);
$filesize = filesize($t_a);
$filesize = (0 === $filesize) ? 1:$filesize-8;
fseek($fp,8);
$str = fread($fp,$filesize);
flock($fp, 3);
fclose($fp);
$str = unserialize($str);
foreach ($str as $k => $v) {
$s = array(
'hits' => $v['hits'],
'size' => $v['size'],
'type' => $v['type'],
'file' => $v['file'],
'topic' => $f.'/'.$t);
$reflink[$v['id']] = $s;
$linkfiles[] = $v['id']; // имя прикрепленного файла в папке uploads
}
unset($str);
}
}
closedir($dt);
}
}
closedir($df);
}
// 2. считать список файлов из uploads
$upfiles = array();
$d = @opendir('uploads');
if ($d) {
while (false !== ($e = readdir($d))) {
if ($e == 'index.html' | is_dir($e)) continue;
$upfiles[] = $e;
}
closedir($d);
}
// 3. вывод имен несвязанных с сообщениями файлов
$count = 0;
$size = 0;
echo "<h2>Losted files</h2>\n";
echo "<table border=1 cellpadding=10>\n";
echo "<tr><th>Filename</th><th>Size (bytes)</th><th>Image</th></tr>\n";
foreach($upfiles as $file){
if (!in_array($file, $linkfiles)) {
$filesize = filesize("./uploads/$file");
echo "<tr><td>$file</td><td>$filesize</td><td> ";
if ('.EXT' !== strtoupper(substr($file,-4,4))) { // картинка
echo "<img src='./uploads/$file'>";
}
echo "</td></tr>\n";
$size += $filesize;
$count++;
}
}
echo "<tr><td>Total: $count file(s)</td><td>Total size: $size</td><td> </td></tr>\n";
echo '</table>';
echo <<<DATA
</body>
</html>
DATA;
?>
CODE:
загружается в саму папку uploads с именем index.php и запускается строкой сайт/uploads/index.php можно использовать в качестве галереи,удалив в таблице последнюю ячейку <th>.
<?php
$listok='index.php';
if ($handle = opendir('./'))
{
echo "";
while (false !== ($file = readdir($handle)))
{
if(is_file($file))
{
if($file!=$listok and $file!='style.css')
{
print"<table align='center' style='font-size:13;font-family:Comic Sans MS;width:300;height:200;border:solid black 1;'>\n";
print"<tr><th style='width:150px;'>\n";
print"<A HREF='$file' target='blank'>\n";
print"<img src='$file' style='border:dotted 1 silver;width:150;height:130;'></a>\n";
print"</th><th>".$file."\n<br></th></tr></table>\n";
}
}
}
closedir($handle);
}
?>
$listok='index.php';
if ($handle = opendir('./'))
{
echo "";
while (false !== ($file = readdir($handle)))
{
if(is_file($file))
{
if($file!=$listok and $file!='style.css')
{
print"<table align='center' style='font-size:13;font-family:Comic Sans MS;width:300;height:200;border:solid black 1;'>\n";
print"<tr><th style='width:150px;'>\n";
print"<A HREF='$file' target='blank'>\n";
print"<img src='$file' style='border:dotted 1 silver;width:150;height:130;'></a>\n";
print"</th><th>".$file."\n<br></th></tr></table>\n";
}
}
}
closedir($handle);
}
?>
9. Pauk - 8 апреля 2012 — 10:33 - перейти к сообщению
Леший пишет:
а как дальше определить что файл отвалившийся?
Для поиска лишних файлов использую это:
10. Леший - 8 апреля 2012 — 11:13 - перейти к сообщению
Чисто по памяти. Удалял тему с картинкой, а тут вижу что она всё ещё загружена.
11. Pauk - 8 апреля 2012 — 11:18 - перейти к сообщению
ок, спасибо, буду юзать... а то у меня в свое время при переходе с 0.15 на RC1 отвалилось часть фото от постов.
12. 1Bot - 10 апреля 2012 — 17:26 - перейти к сообщению
Леший пишет:
Чисто по памяти. Удалял тему с картинкой, а тут вижу что она всё ещё загружена.
Может на файл после его помещения в папку права доступа поменялись и он стал не удаляемый?
13. Леший - 10 апреля 2012 — 18:27 - перейти к сообщению
Фик его знает, не подумал посмотреть права.
14. Mishanya75 - 27 июля 2013 — 06:05 - перейти к сообщению
1Bot, можно ли добавить возле каждой "отвалившейся" картинки кнопку "удалить"? Так имхо удобнее будет: нашёл, увидел, удалил)))
15. 1Bot - 29 июля 2013 — 07:51 - перейти к сообщению
Mishanya75 пишет:
можно ли добавить возле каждой "отвалившейся" картинки кнопку "удалить"? Так имхо удобнее будет: нашёл, увидел, удалил
Конечно можно, но это будет потенциальная уязвимость в форуме, потому специально не добавлено удаление через форму файлов-картинок форума - только вручную.