Проблема с вложениями после обновления 1.1.14 -> 2.0. Нужно прописать mime_type

Автор Roman, 24 сентября 2011, 15:42:57

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Roman

Проблема: после обновления форума с 1.1.14 на 2.0, по клику на многих фотографиях - вложениях, происходит то, что вместо отображения большой картинки в новом окне, как это было раньше, теперь появляется предложение сохранить файл на диске.

Причины: искал, в чем дело, и обнаружил следующее. В БД, в таблице smf_attachments, в версии 2.0 (по сравнению с 1.1.14) добавились столбцы "fileext", "mime_type", "id_folder", "approved".
Так вот, при обновлении версии форума, столбцы "fileext", "id_folder" и "approved" автоматически заполнились. А "mime_type", почему-то, остался пустым. И причина оказалась именно в этом. Если внести туда image/jpeg (для jpg файла, соответственно) то большая картинка начинает нормально открываться, как раньше.

Не очень разбираюсь в языке SQL-запросов, поэтому:
Вопрос. Какой нужно выполнить запрос в БД (PhpMyAdmin), чтобы для строк, в которых "fileext" = jpg, прописалось "mime_type" = image/jpeg ?

kak2z

Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

Roman

Да, пробовал. Желаемого эффекта не дало:)
После этого и полез ковырять файлы и БД.

Кстати, что интересно, для некоторых старых вложений mime_type прописан. Но для большинства - нет. Новые вложения, после апгрейда движка, также загружаются нормально, mime_type автоматически прописывается. А вот для старых придется прописать через PhpMyAdmin. Осталось узнать, как правильно сделать SQL запрос)

Roman

#3
Кто разбирается в SQL, скажите, этот запрос является корректным?
UPDATE `smf_attachments` SET `mime_type` = 'image/jpeg' WHERE `fileext` = 'jpg' ;
upd.
или, по аналогии с тем, что выдает сам пхпмайадмин, вот так:
UPDATE  `имя_базы`.`smf_attachments` SET  `mime_type` =  'image/jpeg' WHERE  `smf_attachments`.`fileext` =  'jpg';
Вроде, то же самое, только дополнительно уточняются имя базы и таблицы.

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

digger®

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

Roman

digger, ок, спасибо, попробую поискать.
Хотя, с помощью SQL запроса, думаю, будет проще.

digger®

Цитата: Roman от 24 сентября 2011, 20:56:46
digger, ок, спасибо, попробую поискать.
Хотя, с помощью SQL запроса, думаю, будет проще.
Ну кроме jpeg там еще всякие типы будут, придется их все прогонять через запросы.
А в скрипте, видимо, уже все учтено было.

Roman

Удалось найти только это:
http://www.simplemachines.org/community/index.php?topic=402808.0
http://dev.simplemachines.org/mantis/view.php?id=4700
Сам скрипт не нашел.

Причем, в багтрекере, если я правильно понимаю, это проблема считается решенной.
И в upgrade_2-0_mysql.sql действительно обнаруживается что-то напоминающее заполнение заполнение mime_type:
$request = upgrade_query("
SELECT id_attach, filename, fileext
FROM {$db_prefix}attachments
WHERE fileext != ''
AND mime_type = ''
LIMIT $_GET[a], 100");

..............................пропущен кусок кода

// Do the updates?
foreach ($ext_updates as $key => $update)
{
upgrade_query("
UPDATE {$db_prefix}attachments
SET mime_type = '$update[mime]'
WHERE id_attach IN (" . implode(',', $update[files]) . ")");

// Remove it.
unset($ext_updates[$key]);
}

Однако, по факту они почему-то все равно оказались пустыми)


p.s. Буду благодарен, если кто-то оценит правильность предложенного выше SQL запроса для заполнения mime_type.

Roman

Почитал документацию, понял, что предположенный выше запрос вполне корректный.
Запустил на рабочей базе. Всё хорошо, все картинки-вложения теперь открываются как надо.

На случай, если кому понадобится, запросы были такие:
UPDATE  `имя_вашей_базы`.`smf_attachments` SET  `mime_type` =  'image/jpeg' WHERE  `smf_attachments`.`fileext` =  'jpg';

UPDATE  `имя_вашей_базы`.`smf_attachments` SET  `mime_type` =  'image/jpeg' WHERE  `smf_attachments`.`fileext` =  'jpeg';

UPDATE  `имя_вашей_базы`.`smf_attachments` SET  `mime_type` =  'image/gif' WHERE  `smf_attachments`.`fileext` =  'gif';

UPDATE  `имя_вашей_базы`.`smf_attachments` SET  `mime_type` =  'image/png' WHERE  `smf_attachments`.`fileext` =  'png';

Выполнялись во вкладке "SQL" PhpMyAdmin, каждый по отдельности. Имя базы, разумеется, нужно подставить свое.

Beer

А у тебя все вложения перенеслись после обновления?
У меня вот ~20% вложений недоступны стали, хотя сами файлы в папке присутствуют...
Починить - предлагает их просто удалить...

Roman

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

А вы перед обновлением делали обслуживание вложений? Может, и не в обновлении дело вовсе.
Вы смотрели, файлы, которые система предлагает вам удалить, принадлежат к каким-либо сообщениям?
В БД у них свойства корректно прописаны?

Beer

Я пока заморозил переход на 2ку всвязи с нерешенностью этой проблемы...
Тут я писал о ней:
http://www.simplemachines.ru/index.php?topic=12917.0

Могу конечно еще раз попробовать запустить конвертацию на вновь созданном форуме.

Файлы в SMF1 в сообщениях открываются норм, а после перехода на 2 - часть их невидна - только серый квадрат 1см превьюхи и название вложения...

Мозг уже кипит...

Roman