Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Загрузка фото с мобильных устройств

Проблемы с установкой или работой phpBB 3.2.x? Получите помощь здесь!
Внимание: с 7 ноября 2020 года phpBB Group завершено дальнейшее развитие phpBB версии 3.2, а с 1 августа 2024 года будет прекращена её поддержка.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.

Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB 3.1.x/3.2.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Vlad__
phpBB 2.0.7
Сообщения: 566
Стаж: 7 лет 3 месяца
Благодарил (а): 283 раза
Поблагодарили: 65 раз

Загрузка фото с мобильных устройств

Сообщение Vlad__ »

3.2. Периодически пользователи жалуются, что не могут загрузить фото-вложения на форум с мобильных устройств. Чемпион по проблемам Опера, но и Хрому достается. То треугольник с восклицательным знаком после загрузки, то "ошибка http". Симптомы проявляются на фото, снятые самим телефоном и на определенных устройствах-версиях андроида. Отключение в админке проверки mime ничего не дает. Помнится писали про 3.0, что проверка mime еще зашита в functions_upload.php и даже пробегал фикс: проверяем юзерагент и если андроид, то mime-type определяется по расширению файла. Но в 3.2 function_upload.php я так понял убрана. Куда здесь смотреть?

PS: Расширения типа image rotator не причем. При его включении-отключении ситуация аналогичная.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: Загрузка фото с мобильных устройств

Сообщение rxu »

Для начала надо понять, какая ошибка.
Изображение
Vlad__
phpBB 2.0.7
Сообщения: 566
Стаж: 7 лет 3 месяца
Благодарил (а): 283 раза
Поблагодарили: 65 раз

Re: Загрузка фото с мобильных устройств

Сообщение Vlad__ »

В логах сервера тишина. Не подскажите как работать с дебагом? Я его включил. Внизу появилась ссылка sql. Где смотреть ошибки? По ссылке sql вроде ошибок нет, в админке в разделе лог ошибок тоже. Где-то еще логируются?

При загрузке проблемных файлов с компа та же проблема - "Вы попытались отправить недопустимый тип файла изображения."
Файл из галереи телефона типа IMG_20170422_163300.jpg. Самое интересное, если расширение изменить на png, то все загружается нормально.

На мой дилетантский взгляд проблема с определением mime-type некоторых графических файлов Где в коде форума еще его проверка, т.к. отключение-включение в админке ничего не дает. Я уже писал, раньше на 3-ке подобное как-то решалось:

https://tracker.phpbb.com/browse/PHPBB3-11148

потом вроде в 3.1 пофиксили, но где теперь в 3.2 код проверки?
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 9 лет 11 месяцев
Благодарил (а): 41 раз
Поблагодарили: 932 раза

Re: Загрузка фото с мобильных устройств

Сообщение LavIgor »

Vlad__, mimetype_guesser там же и находится, где раньше.
А классы для работы с загруженными файлами раскидали по отдельным файлам с говорящими названиями, найти их совсем не сложно.
Vlad__
phpBB 2.0.7
Сообщения: 566
Стаж: 7 лет 3 месяца
Благодарил (а): 283 раза
Поблагодарили: 65 раз

Re: Загрузка фото с мобильных устройств

Сообщение Vlad__ »

LavIgor, не подскажите, где там хотя бы временно отключить проверку? Чтобы проверить из-за этого или нет.
Vlad__ писал(а): 11.06.2017 11:42Самое интересное, если расширение изменить на png, то все загружается нормально.
Или открыть в графическом редакторе и пересохранить. С помощью этого сервиса: https://www.imgonline.com.ua/delete-exif.php удалил метаданные изображения - все загрузилось как нужно. Дело в метаданных?

Вот тут обсуждалось уже что-то подобное: Ошибка вставки фотографий
По идее, EXIF-заголовки должны идти первыми в JPEG/TIFF файлах, генерируемых фотоаппаратами. Но, к сожалению, каждый производитель имеет свое представление того, каким образом компоновать метаданные изображения. Поэтому будьте готовы к ситуации, когда перед Exif-заголовком есть еще что-то.
Конкретные модели могут генерировать jpg, при попытке получения метаданных из которых, может возникнуть ситуация, когда функция exif_read_data() вернет массив, содержащий черти-что и сгенерирует ошибку, которую не сможет спарсить plupload (ну как-то так).
Оно? Как бороться? Я не могу объяснять каждому пользователю, что вам нужно пересохранить, ресайзить фото, удалять метаданные - в ответ услышу, что за ерунда и что за глючный форум! :(


Вот аналогичная тема: Проблема с загрузкой вложений
У меня фото из архива в ней тоже не загружаются.
Vlad__
phpBB 2.0.7
Сообщения: 566
Стаж: 7 лет 3 месяца
Благодарил (а): 283 раза
Поблагодарили: 65 раз

Re: Загрузка фото с мобильных устройств

Сообщение Vlad__ »

Проблему решил заменой в filespec.php вот этого куска кода:

Код: Выделить всё

		// Get mimetype of supplied file
		$this->mimetype = $this->get_mimetype($this->destination_file);

		if ($this->is_image() && !$skip_image_check)
		{
			$this->width = $this->height = 0;

			$this->image_info = $this->imagesize->getImageSize($this->destination_file, $this->mimetype);

			if ($this->image_info !== false)
			{
				$this->width = $this->image_info['width'];
				$this->height = $this->image_info['height'];

				// Check image type
				$types = upload::image_types();

				if (!isset($types[$this->image_info['type']]) || !in_array($this->extension, $types[$this->image_info['type']]))
				{
					if (!isset($types[$this->image_info['type']]))
					{
						$this->error[] = $this->language->lang('IMAGE_FILETYPE_INVALID', $this->image_info['type'], $this->mimetype);
					}
					else
					{
						$this->error[] = $this->language->lang('IMAGE_FILETYPE_MISMATCH', $types[$this->image_info['type']][0], $this->extension);
					}
				}

				// Make sure the dimensions match a valid image
				if (empty($this->width) || empty($this->height))
				{
					$this->error[] = $this->language->lang('ATTACHED_IMAGE_NOT_IMAGE');
				}
			}
			else
			{
				$this->error[] = $this->language->lang('UNABLE_GET_IMAGE_SIZE');
			}
		}

		$this->file_moved = true;
		$this->additional_checks();
		unset($this->upload);

		return true;
	}
На почти аналогичный из functions_uoload.php 3.1, заменив только $types = fileupload::image_types(); на $types = upload::image_types();

Код: Выделить всё

	// Get mimetype of supplied file
		$this->mimetype = $this->get_mimetype($this->destination_file);

		if ($this->is_image() && !$skip_image_check)
		{
			$this->width = $this->height = 0;

			if (($this->image_info = @getimagesize($this->destination_file)) !== false)
			{
				$this->width = $this->image_info[0];
				$this->height = $this->image_info[1];

				if (!empty($this->image_info['mime']))
				{
					$this->mimetype = $this->image_info['mime'];
				}

				// Check image type
				$types = upload::image_types();

				if (!isset($types[$this->image_info[2]]) || !in_array($this->extension, $types[$this->image_info[2]]))
				{
					if (!isset($types[$this->image_info[2]]))
					{
						$this->error[] = sprintf($user->lang['IMAGE_FILETYPE_INVALID'], $this->image_info[2], $this->mimetype);
					}
					else
					{
						$this->error[] = sprintf($user->lang['IMAGE_FILETYPE_MISMATCH'], $types[$this->image_info[2]][0], $this->extension);
					}
				}

				// Make sure the dimensions match a valid image
				if (empty($this->width) || empty($this->height))
				{
					$this->error[] = $user->lang['ATTACHED_IMAGE_NOT_IMAGE'];
				}
			}
			else
			{
				$this->error[] = $user->lang['UNABLE_GET_IMAGE_SIZE'];
			}
		}

		$this->file_moved = true;
		$this->additional_checks();
		unset($this->upload);

		return true;
	}
	

Все теперь загружается как надо, даже проблемные изображения. Я прекрасно понимаю, что совсем некорректно вносить изменения в файлы движка форума, но какой у меня был вариант? Ждать месяцами когда пофиксят и выслушивать претензии пользователей?

Прошу специалистов посмотреть на эти листинги и сказать все ли правильно в моем решении откатится на старый кусок кода, нет ли тут подводных камней и дополнительных глюков, и в чем была и есть проблема? А также пофиксить этот баг в следующей версии.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: Загрузка фото с мобильных устройств

Сообщение rxu »

Re: Проблема с загрузкой вложений

Отправлено спустя 27 минут 44 секунды:
Исправлено в phpBB 3.2.1.
Изображение
Vlad__
phpBB 2.0.7
Сообщения: 566
Стаж: 7 лет 3 месяца
Благодарил (а): 283 раза
Поблагодарили: 65 раз

Re: Загрузка фото с мобильных устройств

Сообщение Vlad__ »

rxu писал(а): 12.06.2017 8:44Исправлено в phpBB 3.2.1.
Не совсем. Теперь иногда ( логику не уловил, по-моему когда размер стороны изображения х00 (800,1000...) и есть EXIF на некоторых загрузках под пользователем (под админом почему-то все нормально) выскакивает такое окошко и картинка не загружается: "Размеры изображения должны быть не менее 0 пикселей×0 пикселей и не более 1280 пикселей×1280 пикселей. Размер отправленного изображения — 1536 пикселей×2304 пикселя." Хотя размер загружаемого изображения 600х900. Его можно открыть в графическом редакторе, пересохранить и станет все нормально. Интуитивно опять поменял кусок кода на более старый от 3.1 как в моем сообщении выше - все стало без проблем. Хотя судя по всему причина не там. Код остался такой же как в 3.2.0. Видимо что-то добавили, чтобы он отрабатывал как нужно, но как обычно вылез новый баг. Проблема уже не касается мобильных устройств, это происходит и на десктопе.
Vlad__
phpBB 2.0.7
Сообщения: 566
Стаж: 7 лет 3 месяца
Благодарил (а): 283 раза
Поблагодарили: 65 раз

Re: Загрузка фото с мобильных устройств

Сообщение Vlad__ »

В общем, сузил правки. Файл filespec.php. Вот этот код:

Код: Выделить всё

$this->image_info = $this->imagesize->getImageSize($this->destination_file, $this->mimetype);

                    if ($this->image_info !== false)
                      {
                              $this->width = $this->image_info['width'];
                              $this->height = $this->image_info['height'];
меняем на:

Код: Выделить всё

 if (($this->image_info = @getimagesize($this->destination_file)) !== false)
                        {
                                $this->width = $this->image_info[0];
                                $this->height = $this->image_info[1];

                                if (!empty($this->image_info['mime']))
                                {
                                        $this->mimetype = $this->image_info['mime'];
                                }
и ниже в пяти местах image_info['type'] на image_info[2]

Все загружается нормально. В архиве проблемный файл. Объясните, что меняют эти правки?
Вложения
ladder fort large.jpg.zip
(472.97 КБ) 117 скачиваний
Ответить

Вернуться в «Поддержка phpBB 3.2.x»