Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Проблемы с загрузкой файлов

Опубликовано:

Здрастввуйте. Тут такая проблема, я перенес форум на новый сервер, все вроде бы отлично, но файлы, закачаные на форум (до переноса) скачать невозможно ([#10173] Запрашиваемый вами прикрепленный файл не найден.), а так же невозможно залить новый файл, ни одного разрешения и размера. Помогите, не знаю, что делать. Уже перестраивал кеш, не помогло.

Рекомендованные сообщения

Опубликовано:

Панель управления > Настройки и инструменты > Системные настройки > Глобальные настройки

 

Пути и адреса форума

Путь до директории загрузок - Укажите тот, который определяет IPB

 

Ну и права на папки посмотрите....

Опубликовано:
  • Автор

Огромное спасибо! Помогло!

  • 5 лет спустя...
Опубликовано:

Возникла такая же проблема после обновления версии IPB

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

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

 

UPD:

Нашел вроде бы причину:

В БД адрес файла записан так: monthly_09_2015/post-1-0-96731700-1442694223.ipb

А в папке uploads он называется так: fast_connect_rgmix.eu_v1.5.rar.2feb88e3874c8f4eb9a5aaabda21677a

Если переименовать файл в папке в такой же, как и записан в БД , то файл становится доступным.

Что могло произойти с файлами?

Заметил, что и до обновления было так же, но не знаю с каких пор.

Изменено пользователем HooLIGUN

Опубликовано:

но файлы почему то не определяются

До какой версии обновлялись? Код и текст ошибки? Если IPS 4, то следует писать в разделе этой ветке ибо в нем совсем другая структура и другие причины.

Опубликовано:

До какой версии обновлялись? Код и текст ошибки? Если IPS 4, то следует писать в разделе этой ветке ибо в нем совсем другая структура и другие причины.

с 3.4.7 на 3.4.8.

 

Я отредактировал свой пред. пост.

Файлы на сервере почему то имеют другое название (название файла.расширение.рандомный набор символов) , отличающиеся от названия в бд

Как бы вернуть прежний вид файлам...

Пример:

Файл в БД

post-48258-0-59688800-1447329584_thumb.png

Файл в папке Uploads

post-48258-0-23000600-1447329611_thumb.png

 

Но при загрузке новых файлов, они имеют правильное название, например (post-1-0-90129700-1441906836.ipb)

Изменено пользователем HooLIGUN

Опубликовано:

В бд должно быть два названия - оригинальное имя файла (attach_file) и файл сохраненный на диске (attach_location). Если у вас файл на диске носит то же название что и оригинальное название можно заменить attach_location из attach_file. Но опять же, на диске есть какой-то хеш, поэтому скорее всего придется написать скрипт который пройдется по файлам в папке и обновит новое имя в бд с этим хешем, либо наоборот переименует файл на диске.

Опубликовано:

В бд должно быть два названия - оригинальное имя файла (attach_file) и файл сохраненный на диске (attach_location). Если у вас файл на диске носит то же название что и оригинальное название можно заменить attach_location из attach_file. Но опять же, на диске есть какой-то хеш, поэтому скорее всего придется написать скрипт который пройдется по файлам в папке и обновит новое имя в бд с этим хешем, либо наоборот переименует файл на диске.

то есть этот хэш явно что-то не нормальное?

Что же могло переименовать файлы. Ведь они получается "раскодировались" из названия принятого в ipb post-1-0-27602000-1442758568.ipb , в оригинальное+хэш.

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

Спасибо за ответ.

Опубликовано:
то есть этот хэш явно что-то не нормальное?

Хеш это нормально, видимо для того, чтобы не получить на сервере файлы с опасным расширением, например .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';

Опубликовано:

Большое спасибо, часть файлов восстановил старым бекапом, часть данным скриптом!

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.