kurtq 0 05/19/10 16:56 Здрастввуйте. Тут такая проблема, я перенес форум на новый сервер, все вроде бы отлично, но файлы, закачаные на форум (до переноса) скачать невозможно ([#10173] Запрашиваемый вами прикрепленный файл не найден.), а так же невозможно залить новый файл, ни одного разрешения и размера. Помогите, не знаю, что делать. Уже перестраивал кеш, не помогло. Поделиться сообщением Ссылка на сообщение
Ph-A 395 05/19/10 17:04 Панель управления > Настройки и инструменты > Системные настройки > Глобальные настройки Пути и адреса форумаПуть до директории загрузок - Укажите тот, который определяет IPB Ну и права на папки посмотрите.... Поделиться сообщением Ссылка на сообщение
HooLIGUN 10 11/12/15 11:23 (изменено) Возникла такая же проблема после обновления версии IPBПути указаны верно,права тоже на всех папках и подпапках upload стоят верные, но файлы почему то не определяются, хотя прикрепленные изображения отображаются.Так же новые файлы нормально загружаются и скачиваются. Что может быть? UPD:Нашел вроде бы причину:В БД адрес файла записан так: monthly_09_2015/post-1-0-96731700-1442694223.ipbА в папке uploads он называется так: fast_connect_rgmix.eu_v1.5.rar.2feb88e3874c8f4eb9a5aaabda21677aЕсли переименовать файл в папке в такой же, как и записан в БД , то файл становится доступным.Что могло произойти с файлами?Заметил, что и до обновления было так же, но не знаю с каких пор. Изменено 12 ноября 2015 пользователем HooLIGUN Поделиться сообщением Ссылка на сообщение
siv1987 2628 11/12/15 11:40 но файлы почему то не определяютсяДо какой версии обновлялись? Код и текст ошибки? Если IPS 4, то следует писать в разделе этой ветке ибо в нем совсем другая структура и другие причины. 1 Поделиться сообщением Ссылка на сообщение
HooLIGUN 10 11/12/15 11:57 (изменено) До какой версии обновлялись? Код и текст ошибки? Если IPS 4, то следует писать в разделе этой ветке ибо в нем совсем другая структура и другие причины.с 3.4.7 на 3.4.8. Я отредактировал свой пред. пост.Файлы на сервере почему то имеют другое название (название файла.расширение.рандомный набор символов) , отличающиеся от названия в бд Как бы вернуть прежний вид файлам...Пример:Файл в БДФайл в папке Uploads Но при загрузке новых файлов, они имеют правильное название, например (post-1-0-90129700-1441906836.ipb) Изменено 12 ноября 2015 пользователем HooLIGUN Поделиться сообщением Ссылка на сообщение
siv1987 2628 11/12/15 12:07 В бд должно быть два названия - оригинальное имя файла (attach_file) и файл сохраненный на диске (attach_location). Если у вас файл на диске носит то же название что и оригинальное название можно заменить attach_location из attach_file. Но опять же, на диске есть какой-то хеш, поэтому скорее всего придется написать скрипт который пройдется по файлам в папке и обновит новое имя в бд с этим хешем, либо наоборот переименует файл на диске. 1 Поделиться сообщением Ссылка на сообщение
HooLIGUN 10 11/12/15 12:15 В бд должно быть два названия - оригинальное имя файла (attach_file) и файл сохраненный на диске (attach_location). Если у вас файл на диске носит то же название что и оригинальное название можно заменить attach_location из attach_file. Но опять же, на диске есть какой-то хеш, поэтому скорее всего придется написать скрипт который пройдется по файлам в папке и обновит новое имя в бд с этим хешем, либо наоборот переименует файл на диске.то есть этот хэш явно что-то не нормальное?Что же могло переименовать файлы. Ведь они получается "раскодировались" из названия принятого в ipb post-1-0-27602000-1442758568.ipb , в оригинальное+хэш.Ну тогда мне проще будет пожертвовать месячными файлами и загрузить файлы из старого бекапа, там они еще нормальные.Спасибо за ответ. Поделиться сообщением Ссылка на сообщение
siv1987 2628 11/12/15 12:44 то есть этот хэш явно что-то не нормальное?Хеш это нормально, видимо для того, чтобы не получить на сервере файлы с опасным расширением, например .php и прямой доступ к ним. Просто он немного усложняет задачу. Хотя все равно простым запросом в бд заменить не удастся, если вы говорите что в таком виде только часть аттачей - неизвестно какая часть нормальная а какая часть нет. На самом деле это очень легко исправить вот таким простым скриптом. Файл следует положить в корень форума. <?php define( 'IPB_THIS_SCRIPT', 'public' ); define( 'IPS_PUBLIC_SCRIPT', 'index.php'); define( 'IPS_ENFORCE_ACCESS', true); require_once( 'initdata.php' ); require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' ); require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' ); $registry = ipsRegistry::instance(); $registry->init(); $cache = $registry->cache(); $caches =& $registry->cache()->fetchCaches(); $settings =& $registry->fetchSettings(); $member =& $registry->member()->fetchMemberData(); $DB = $registry->DB(); function renameFiles( $path ) { global $registry, $settings, $DB; foreach( new DirectoryIterator( $path ) as $file ) { if ( $file->isDot() || substr( $file->getFilename(), 0, 1 ) === '.' ) { continue; } $fileName = $file->getFilename(); $location = $path . '/'. $fileName; if ( $file->isDir() ) { renameFiles( $location ); } else { if( preg_match( '/^(.+?)\.(\w{32})$/i', $fileName, $out ) ) { $DB->build( array( 'select' => '*', 'from' => 'attachments', 'where' => 'attach_file="'. $DB->addSlashes( $out[1] ) .'"' ) ); $DB->execute(); if( $totalRows = $DB->getTotalRows() ) { while( $row = $DB->fetch() ) { if( filesize( $location ) == $row['attach_filesize'] ) { $_fileName = substr( $row['attach_location'], strrpos( $row['attach_location'], '/' ) + 1 ); $_location = $path . '/'. $_fileName; rename( $location, $_location ); echo "Rename file {$fileName} to {$_fileName}<br>"; break; } } } } } } } renameFiles( $settings['upload_dir'] ); echo 'Done'; 1 Поделиться сообщением Ссылка на сообщение
HooLIGUN 10 11/12/15 18:27 Большое спасибо, часть файлов восстановил старым бекапом, часть данным скриптом! Поделиться сообщением Ссылка на сообщение