Перейти к публикации
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.

Не создаются папки в uploads

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

Всем добрый день.

Подскажите пожалуйста в чем проблема: не создаются папки по месяцам в uploads, файлы загружаются прямо в папку! Права установлены на запись. В чем проблема может быть? Версия форума 3.1.2.

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

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

Не знаю, как в 3.1.2, но в близкой к ней версии 3.1.4 есть такой код

		$this->attach_settings['allow_monthly_upload_dirs'] = @ini_get("safe_mode") ? 0 : ( $this->settings['safe_mode_skins'] ? 0 : 1 );

Т.е., если safe mode (безопасный режим) активирован, то аттачи будут загружаться прямо в папку uploads.

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

Т.е., если safe mode (безопасный режим) активирован, то аттачи будут загружаться прямо в папку uploads.

 

Точно, выключил безопасный режим и папки начали создаваться. Огромное спасибо за подсказку!

Теперь бы еще найти способ уже загруженные фото отсортировать по папкам!Есть такая возможность, может сталкивался кто?

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

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

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

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

Это уже трудно очень, никогда таким не занимался!

А по средствам самого движка такое не предусмотрено, пересчет или еще что?

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

Пересчет предусмотрен, перемещение - нет.

Если очень сильно хочется, перестроение аттачей происходит в /admin/applications/core/modules_admin/tools/rebuild.php, метод rebuildAttachdata(). Там можете дописать код, чтобы переместить файл если его путь не начинается с monthly_ и находится в корне uploads (т.е. адрес не содержит слешей). Если и это сложно очень - просто забейте. Думаю, у вас не миллион аттачей в одной папке.

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

Миллиона конечно нет :) но 62000 тоже многовато!

Кинте ссылку пожалуйста где можно посмотреть пример как писать этот скрипт, если знаете?

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

Документация по php - http://php.net/manual/ru/

Ну и соответственно там справочник по функциям которые вам понадобятся strpos, rename и тд.

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

Что-то я сегодня добрый... так уж и быть.

Открыть /admin/applications/core/modules_admin/tools/rebuild.php

Найти

 

				if( $r['attach_is_image'] )
				{
					$dims = @getimagesize( $this->settings['upload_dir'].'/'.$r['attach_location'] );

					if( $dims[0] AND $dims[1] )
					{
						$update['attach_img_width'] = $dims[0];
						$update['attach_img_height'] = $dims[1];
					}
				}

Ниже добавить

 

				if( strpos( $r['attach_location'], '/' ) === false )
				{
					$directory = 'monthly_'.date( 'm_Y', $r['attach_date'] );
					$uploadDir = $this->settings['upload_dir'].'/'.$directory;

					if( ! is_dir( $uploadDir ) )
					{
						if( mkdir( $uploadDir ) )
						{
							@chmod( $uploadDir, 0777 );
						}
					}

					$sourceFile = $this->settings['upload_dir'].'/'.$r['attach_location'];
					$renameFile = $uploadDir.'/'.$r['attach_location'];

					if( rename( $sourceFile, $renameFile ) )
					{
						$update['attach_location'] = $directory.'/'.$r['attach_location'];
					}

					if( $r['attach_thumb_location'] AND ! strpos( $r['attach_thumb_location'], '/' ) )
					{
						$sourceThumbFile = $this->settings['upload_dir'].'/'.$r['attach_thumb_location'];
						$renameThumbFile = $uploadDir.'/'.$r['attach_thumb_location'];

						if( file_exists( $sourceThumbFile ) )
						{
							if( rename( $sourceThumbFile, $renameThumbFile ) )
							{
								$update['attach_thumb_location'] = $directory.'/'.$r['attach_thumb_location'];
							}
						}
					}
				}

 

Перейти в АЦ -> Пересчет и обновление. Запустить инструмент "Обновить информацию о прикрепленных файлах".

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

Спасибо огромное, а то у меня уже голова лопается. Там нужно начинать с азов чтоб написать скрипт.

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

код вставил, пересчет запустил. Обработало около 30000 файлов (их там больше 60000), но ничего не перенесло никуда! В чем проблема может быть? Папки по месяцам должны были создаться автоматически или их нужно предварительно создавать?

 

Сори просто закрылась страница с процесом, все отфильтровало и переместило :D

Остались только фото аватарок, их почему то не переместило! Если их переместить вручную подгружаться будут они или нет?

Еще раз огромное спасибо за помощь!

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

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

Все создается автоматически. Папка /uploads/ обязательно должна иметь права на запись. Если при загрузке обычных файлов создаются подпапки, то и тут они тоже должны были создаться. Вы уверены что ничего не перенеслось? Вы точно запустили правильный инструмент пересчета? Если во время пересчета возникли какие-то ошибки, нужно их скопировать и остановить процесс (закрыть вкладку).

 

Аватарки - не аттачи. Вручную переносить нельзя, данные о них хранятся в базе данных.

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

Все перенеслось и отфильтровалось, теперь все красиво по папкам!

Тогда просто закрылась страница с процесом, вот я и подумал что сбой! Через некоторое время проверил а вложения все перенеслись(видимо процес закончился).

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

Хотя опять же, если очень хочется, можно перенести и аватарки, но только в одну конкретную папку, а потом sql запросом обновить путь к ним.

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

Хотя опять же, если очень хочется, можно перенести и аватарки, но только в одну конкретную папку, а потом sql запросом обновить путь к ним.

Ну вы меня прям искушаете :)

Думаю пока не нужно, не так много их там!

Сейчас еще нужно разобраться с архивацией тем, не могу что то найти ее вообще в админке! Но это в другой теме...

Огромное спасибо вам за помощь!

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

А этот код после сортировки нужно удалять из rebuild.php?

Не повлияет он если например запустить пересчет удаление потерянных файлов и т.д.?

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

Сейчас на странице 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.