Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
kurtq

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

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

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

Поделиться сообщением


Ссылка на сообщение

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

 

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

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение
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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение

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

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
11/12/15 11:57 (изменено)

До какой версии обновлялись? Код и текст ошибки? Если 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. Но опять же, на диске есть какой-то хеш, поэтому скорее всего придется написать скрипт который пройдется по файлам в папке и обновит новое имя в бд с этим хешем, либо наоборот переименует файл на диске.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

В бд должно быть два названия - оригинальное имя файла (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';

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

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

×
×
  • Создать...