Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
kurtq

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

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

 

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

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

 

UPD:

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

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

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

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

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

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

Edited by HooLIGUN

Share this post


Link to post
Share on other sites

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

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

  • Upvote 1

Share this post


Link to post
Share on other sites

До какой версии обновлялись? Код и текст ошибки? Если 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)

Edited by HooLIGUN

Share this post


Link to post
Share on other sites

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

  • Upvote 1

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites
то есть этот хэш явно что-то не нормальное?

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...