[3.2][3.3] Вставка картинок

У вас есть идея для расширения функциональности phpBB? Расскажите о ней здесь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Michel
Поддержка
Поддержка
Сообщения: 650
Стаж: 14 лет 8 месяцев
Откуда: Липецк
Благодарил (а): 144 раза
Поблагодарили: 81 раз

Re: [3.2][3.3] Вставка картинок

Сообщение Michel »

PredatorZ писал(а): 14.09.2026 21:00 Для того, чтобы загрузить картинку на сторонний сайт - включаю ВПН
Соединение с сайтом устанавливается, картинка загружается. Закидывается ссылка в окно ответа.
Чтобы отправить ответ - надо выключить ВПН (мой хостер туда-сюда мозги делает). Выключаешь ВПН, жмешь кнопку ответить - картинка видна вместе с ответом.
Это все уже всё поняли! Просто здесь нарушается логическая цепочка. Вы включаете КВН для того чтоб загрузить картинку на фотохостинг. Каким образом тогда эта самая картинка с того же самого хостинга отображается на вашем форуме без включённого КВН? У всех данное расширение работает без всяких танцев с бубном. Киньте мне ссылку на ваш форум в ЛС,
PredatorZ писал(а): 14.09.2026 21:00 Надо аналог, чтобы грузился на другой хостинг картинок. Тот, к которому для подключения не нужен ВПН.
Тут вопрос риторический. Так как неизвестно что у вас работает с КВН, а что нет. Во втором посте хорошее расширение с выбором фотохостингов, но вас оно не устраивает, так как вам не охота выполнять условия автора. Жду ссылку, хочется глянуть на эту аномалию.
phpBB 3.3.17 • php 8.5.7 • MySQL(i) 8.0.25-15
Расширения для phpBBСтили для phpBB
PredatorZ
phpBB 1.4.0
Сообщения: 36
Стаж: 10 лет 6 месяцев
Благодарил (а): 3 раза

Re: [3.2][3.3] Вставка картинок

Сообщение PredatorZ »

Michel писал(а): 14.09.2026 21:12 но вас оно не устраивает, так как вам не охота выполнять условия автора
Да, не устраивает. Ищу другие варианты. Или я ОБЯЗАН рассматривать теперь только этот вариант ?
Если не будет других альтернатив, буду рассматривать и этот вариант, а что поделать.
Аватара пользователя
Michel
Поддержка
Поддержка
Сообщения: 650
Стаж: 14 лет 8 месяцев
Откуда: Липецк
Благодарил (а): 144 раза
Поблагодарили: 81 раз

Re: [3.2][3.3] Вставка картинок

Сообщение Michel »

PredatorZ писал(а): 15.09.2026 9:41 Да, не устраивает. Ищу другие варианты. Или я ОБЯЗАН рассматривать теперь только этот вариант ?
Если не будет других альтернатив, буду рассматривать и этот вариант, а что поделать.
Здесь никто, никому, ничего не навязывает и нечему не обязывает. Загрузка изображений как через ваш сайт, так и на прямую потерпела неудачу. Через КВН работает. Отсюда делаем следующий вывод: ваш интернет-провайдер локально блокирует доступ к серверам загрузки Postimages или сам сервис ограничил запросы с российских IP-адресов. Причём как на загрузку так и на выгрузку. Темы на вашем форуме с изображениями с данного фото хостинга грузятся по пол часа и изображения не прогружаются. Поэтому я и спрашивал вас:
Michel писал(а): 14.09.2026 4:23 Если очистить кеш браузера картинка остаётся или исчезает? Что-то мне подсказывает что она исчезнет.
И я оказался прав. Именно поэтому были вставлены наши рекомендации:
Siava писал(а): 10.09.2026 23:57 PredatorZ, плохая идея использовать сторонний ресурс. В один момент вы лишитесь всех картинок.
В нынешней обстановке это более актуально чем когда либо. И даже то расширение которое я вам скидывал во втором посте не даст гарантий что всё не накроется медным тазом.
Варианты решения проблемы:
1) Рекомендовано: Использовать встроенную систему загрузки изображений на сам форум (если проблема с местом, подумать о смене тарифного плана хостинга и даже о смене хостинг провайдера если у вашего нет подходящих тарифов.)
2) Использовать то расширение которое скидывал во втором посте (так как других расширений с возможностью использования РУ хранилищ я не встречал)
3) Заказывать расширение под загрузку изображений на выбранный вами фотохостинг (мало вероятно что найдёте исполнителя или сильно ударит по кошельку)

PS: Есть в планах создание расширения которое будет решать проблемы с местом, дёшево и с большим объёмом хранилища, но это планируется на 27-28 год. Не скоро.
phpBB 3.3.17 • php 8.5.7 • MySQL(i) 8.0.25-15
Расширения для phpBBСтили для phpBB
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17250
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 587 раз
Поблагодарили: 1781 раз

Re: [3.2][3.3] Вставка картинок

Сообщение rxu »

PredatorZ писал(а): 12.09.2026 1:42 у меня версия 3.3.5. А там максимум 3.1

В форуме поддержки расширения люди пишут, что на 3.3 работает расширение, загруженное отсюда https://www.phpbb.com/customise/db/extension/postimage/

Попробовал установить на 3.3.15, ошибок нет. При клике по ссылке открывается модальное окно для загрузки изображения.

image.png

Расширение по факту только добавляет загрузку скрипта mod.postimage.org/phpbb3.js на страницы форума, и всё. Так что ломаться там практически нечему.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Изображение
Аватара пользователя
Michel
Поддержка
Поддержка
Сообщения: 650
Стаж: 14 лет 8 месяцев
Откуда: Липецк
Благодарил (а): 144 раза
Поблагодарили: 81 раз

Re: [3.2][3.3] Вставка картинок

Сообщение Michel »

rxu писал(а): 15.09.2026 12:42 При клике по ссылке открывается модальное окно для загрузки изображения
Окно открывается как и сам сайт, а вот загрузка изображений и выгрузка не работают. Возможно не на всех провайдерах и не во всех регионах. Попробуй загрузить что ни будь. Само расширение работает и выполняет свою функцию. Проблема с самим хранилищем фотохостинга.
1.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.
phpBB 3.3.17 • php 8.5.7 • MySQL(i) 8.0.25-15
Расширения для phpBBСтили для phpBB
PredatorZ
phpBB 1.4.0
Сообщения: 36
Стаж: 10 лет 6 месяцев
Благодарил (а): 3 раза

Re: [3.2][3.3] Вставка картинок

Сообщение PredatorZ »

Michel писал(а): 15.09.2026 11:50 PS: Есть в планах создание расширения которое будет решать проблемы с местом, дёшево и с большим объёмом хранилища, но это планируется на 27-28 год. Не скоро.
Подождем.
Аватара пользователя
Kuskow
phpBB 2.0.6
Сообщения: 504
Стаж: 10 лет 3 месяца
Откуда: 🇰🇿 Караганда
Благодарил (а): 29 раз
Поблагодарили: 48 раз

Re: [3.2][3.3] Вставка картинок

Сообщение Kuskow »

Мне понравился плагин от imgBB для вставки картинок на форум. Но там не всё гладко - иногда россиянам без квн не видно фотки. А увидев эту тему, подумалось, а почему бы не сделать такое самому. Тем более, нынче самому-то ничего и делать не надо - всё делает ИИ, надо только придумать. И вот вчера мы с Google-ai за полчаса состряпали такое. Рядом с окном редактирования сообщения появляется кнопка с облачком "Загрузить фото". Нажимаем, выбираем файлы, они загружаются на сервер форума, сжимаются до 1200x1200 и сохраняются в папку /img/, где раскладываются в подпапки по месяцам. После загрузки в текст сообщения сразу вставляется ссылка на изображение, обрамлённая тегами [img][/img]. И вуаля! Там ещё во время загрузки красота происходит - чессссслово, это уже не я придумал, а сам ИИ, я бы до такого и не догадался. Попробуйте, изменений минимум - удобняк бешеный!

1️⃣ В корневой папке форума создаём папку /img с правами 755 или 777.

2️⃣ В корневой папке форума создаём файл upload_compress.php и записываем в него код:

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

<?php
define('UPLOAD_TOKEN', 'ЗАМЕНИТЬ_ТОКЕН');

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');

$base_upload_dir = 'img/';
$max_width = 1200;
$max_height = 1200;
$uploaded_links = [];

if (!isset($_POST['token']) || $_POST['token'] !== UPLOAD_TOKEN) {
    http_response_code(403);
    echo json_encode(['error' => 'Доступ запрещен']);
    exit;
}

if (!extension_loaded('gd')) {
    http_response_code(500);
    echo json_encode(['error' => 'Библиотека GD не найдена']);
    exit;
}

// Создаем подпапку года/месяца
$sub_dir = date('Ym') . '/';
$target_dir = $base_upload_dir . $sub_dir;

if (!is_dir($target_dir)) {
    @mkdir($target_dir, 0755, true);
}

if (empty($_FILES['images']['name'])) {
    http_response_code(400);
    echo json_encode(['error' => 'Файлы не получены']);
    exit;
}

foreach ($_FILES['images']['tmp_name'] as $key => $tmp_name) {
    if (empty($tmp_name)) continue;

    $orig_name = $_FILES['images']['name'][$key];
    $image_info = @getimagesize($tmp_name);
    
    if (!$image_info) continue; 

    list($width, $height, $type) = $image_info;

    $original_name_clean = pathinfo($orig_name, PATHINFO_FILENAME);
    $original_name_clean = preg_replace('/[^a-zA-Z0-9а-яА-ЯёЁ_\-\.]/u', '', $original_name_clean);

    $short_time = base_convert(str_replace('.', '', microtime(true)), 10, 36);
    
    $file_name = $short_time . '_' . $original_name_clean . '.jpg';
    $target_file = $target_dir . $file_name;

    // Чтение исходного изображения в зависимости от формата
    switch ($type) {
        case IMAGETYPE_JPEG: $src = @imagecreatefromjpeg($tmp_name); break;
        case IMAGETYPE_PNG:  $src = @imagecreatefrompng($tmp_name);  break;
        case IMAGETYPE_WEBP: $src = @imagecreatefromwebp($tmp_name); break;
        default: continue 2;
    }

    if (!$src) continue;

    // --- БЛОК АВТОПОВОРОТА НА ОСНОВЕ EXIF ---
    // Автоповорот имеет смысл только для JPEG/JPG, так как именно туда телефоны пишут тег Orientation
    if ($type === IMAGETYPE_JPEG && function_exists('exif_read_data')) {
        $exif = @exif_read_data($tmp_name);
        if (!empty($exif['Orientation'])) {
            switch ($exif['Orientation']) {
                case 3:
                    $src = imagerotate($src, 180, 0);
                    break;
                case 6:
                    $src = imagerotate($src, -90, 0);
                    // Меняем местами ширину и высоту исходника, так как картинка повернулась на бок
                    $tmp = $width; $width = $height; $height = $tmp;
                    break;
                case 8:
                    $src = imagerotate($src, 90, 0);
                    // Меняем местами ширину и высоту
                    $tmp = $width; $width = $height; $height = $tmp;
                    break;
            }
        }
    }
    // ----------------------------------------

    // Расчет пропорций под максимум 1200x1200px (уже с учетом правильной ориентации)
    $ratio = min($max_width / $width, $max_height / $height);
    if ($ratio < 1) {
        $new_width = round($width * $ratio);
        $new_height = round($height * $ratio);
    } else {
        $new_width = $width;
        $new_height = $height;
    }

    $dst = imagecreatetruecolor($new_width, $new_height);
    
    // Создаем белый фон под прозрачные элементы PNG/WEBP
    $white = imagecolorallocate($dst, 255, 255, 255);
    imagefill($dst, 0, 0, $white);
    
    // Ресайз и перенос пикселей
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

    // Сохраняем в JPG с качеством 83%
    $success = imagejpeg($dst, $target_file, 83);
    
    imagedestroy($src);
    imagedestroy($dst);

    if ($success) {
        $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https://' : 'http://';
        $full_url = $protocol . $_SERVER['HTTP_HOST'] . '/' . $target_file;
        $uploaded_links[] = $full_url;
    }
}

echo json_encode(['links' => $uploaded_links]);
exit;

3️⃣ В папке шаблона /styles/prosilver/template создаём файл fast_upload.js и записываем в него код:

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

(function() {
    let globalFileInput = null;
    const SECRET_TOKEN = 'ЗАМЕНИТЬ_ТОКЕН';

    // Шаблон иконки облака, чтобы возвращать её на место
    const ORIGINAL_ICON = '<i class="icon fa-cloud-upload fa-fw" aria-hidden="true"></i>';

    function getOrCreateFileInput() {
        if (globalFileInput) return globalFileInput;
        const fileInput = document.createElement('input');
        fileInput.type = 'file';
        fileInput.id = 'fast-image-file-input';
        fileInput.multiple = true;
        fileInput.accept = 'image/*';
        fileInput.style.display = 'none';
        document.body.appendChild(fileInput);
        globalFileInput = fileInput;
        return fileInput;
    }

    function injectUploadButton(colorButton, textarea) {
        if (!colorButton || !textarea || colorButton.parentNode.querySelector('.phpbb-fast-upload-trigger')) return;

        const newButton = document.createElement('button');
        newButton.type = 'button';
        newButton.className = 'button button-icon-only phpbb-fast-upload-trigger';
        newButton.title = 'Загрузить фото';
        newButton.innerHTML = ORIGINAL_ICON;
        newButton.style.marginLeft = '4px';

        // Вставляем кнопку в ряд BB-кодов (без дополнительных статусных спанов)
        colorButton.parentNode.insertBefore(newButton, colorButton.nextSibling);

        newButton.onclick = function(e) {
            e.preventDefault();
            e.stopPropagation();

            const fileInput = getOrCreateFileInput();
            fileInput.onchange = null;

            fileInput.onchange = function() {
                if (!fileInput.files || fileInput.files.length === 0) return;

                const formData = new FormData();
                formData.append('token', SECRET_TOKEN);
                
                for (let i = 0; i < fileInput.files.length; i++) {
                    formData.append('images[]', fileInput.files[i]);
                }

                // Изменяем саму кнопку: ставим часики и отключаем клик
                newButton.innerHTML = '⏳';
                newButton.disabled = true;

                fetch('/upload_compress.php', {
                    method: 'POST',
                    body: formData
                })
                .then(response => {
                    if (!response.ok) throw new Error('Ошибка сервера ' + response.status);
                    return response.json();
                })
                .then(data => {
                    if (data.links && data.links.length > 0) {
                        let bbcodeInsert = '\n\n';
                        
                        data.links.forEach((link, index) => {
                            bbcodeInsert += `[img]${link}[/img]`;
                            if (index < data.links.length - 1) {
                                bbcodeInsert += '\n\n\n';
                            }
                        });
                        
                        bbcodeInsert += '\n\n';

                        const startPos = textarea.selectionStart;
                        const endPos = textarea.selectionEnd;
                        const textBefore = textarea.value.substring(0, startPos);
                        const textAfter = textarea.value.substring(endPos, textarea.value.length);

                        textarea.value = textBefore + bbcodeInsert + textAfter;
                        textarea.focus();
                        textarea.selectionStart = textarea.selectionEnd = startPos + bbcodeInsert.length;

                        // При успехе выводим галочку прямо в кнопку
                        newButton.innerHTML = '✅';
                    } else {
                        newButton.innerHTML = '❌';
                    }
                })
                .catch(error => {
                    console.error('Ошибка:', error.message);
                    newButton.innerHTML = '❌';
                })
                .finally(() => {
                    fileInput.value = '';
                    // Через 2.5 секунды возвращаем родную иконку облака и включаем кнопку обратно
                    setTimeout(() => { 
                        newButton.innerHTML = ORIGINAL_ICON;
                        newButton.disabled = false;
                    }, 2500);
                });
            };

            fileInput.click();
        };
    }

    function autoScanAndInject() {
        const colorButtons = document.querySelectorAll('[name="bbpalette"], #bbpalette, .bbcode-color');
        if (colorButtons.length > 0) {
            colorButtons.forEach(colorBtn => {
                const parentForm = colorBtn.closest('form') || colorBtn.closest('.quickreply') || colorBtn.closest('#qr_postform') || document;
                const textarea = parentForm.querySelector('textarea');
                if (textarea) {
                    injectUploadButton(colorBtn, textarea);
                }
            });
        }
    }

    autoScanAndInject();
    const observer = new MutationObserver(() => autoScanAndInject());
    observer.observe(document.body, { childList: true, subtree: true });
})();

4️⃣ В обоих файлах находим текст ЗАМЕНИТЬ_ТОКЕН и меняем его на что-то своё уникальное буквенно-цифровое абракадабренное, но обязательно одинаковое в обоих файлах.

5️⃣ В папке той же папке шаблона из пункта 3 /styles/prosilver/template в самом конце файла overall_footer.html перед закрывающим тегом </html> вставляем одну строку:

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

<!-- INCLUDEJS fast_upload.js -->

6️⃣ Заходим в админку форума: Общие - Очистить кэш.

7️⃣ Идём писать сообщение на своём форуме, нажимаем кнопку Изображение, выбираем файл изображения для загрузки. Попробуйте загрузить очень большой файл - там красивое.
PredatorZ
phpBB 1.4.0
Сообщения: 36
Стаж: 10 лет 6 месяцев
Благодарил (а): 3 раза

Re: [3.2][3.3] Вставка картинок

Сообщение PredatorZ »

Kuskow писал(а): Вчера 5:43 "Загрузить фото". Нажимаем, выбираем файлы, они загружаются на сервер форума, сжимаются до 1200x1200 и сохраняются в папку /img/
Супер. У меня как раз 2 миллиона рублей лишних, оплачивать постоянно раздувающееся место, чтобы на серваке валялись фотки, про которые через неделю все забудут.
Аватара пользователя
Leo Angel
phpBB 2.0.10
Сообщения: 791
Стаж: 8 лет 7 месяцев
Откуда: Израиль
Благодарил (а): 259 раз
Поблагодарили: 96 раз

Re: [3.2][3.3] Вставка картинок

Сообщение Leo Angel »

PredatorZ, ну, конечно, смотреть в темах пустые заглушки после потери картинок на чужих файлохранилищах это лучше!
Верно?
Зато бесплатно! :lol:
Уже минимум лет 15 храню все свои картинки у себя на сервере, где развернул полноценный фотохостинг.
Надоело всё время терять картинки с чужих хранилищ.
У меня на форуме очень много "картиночных" тем.
Недавно положил все свои сайты и фотохостинг на один сервер.
За сервер 60 GB плачу около 90 евро в год. На фотохостинге лежат примерно 170 тысяч картинок.
Свободного места ещё около 20 GB.
Аватара пользователя
Kuskow
phpBB 2.0.6
Сообщения: 504
Стаж: 10 лет 3 месяца
Откуда: 🇰🇿 Караганда
Благодарил (а): 29 раз
Поблагодарили: 48 раз

Re: [3.2][3.3] Вставка картинок

Сообщение Kuskow »

На туристическом форуме пользователи размещают в среднем 10 изображений на каждые 26 сообщений.
За 10 лет существования форума они накатали 2.4 млн сообщений.
923 тыс фотографий они бы загрузили за эти 10 лет.
Среднее занимаемое место на диске на один файл: ~462 КБ
400 GB места заняли бы все файлы.

Хм, да, многовато получается. Хорошо, что я сразу с самого начала отключил загрузку изображений на сервер. Будем думать дальше.
Аватара пользователя
Leo Angel
phpBB 2.0.10
Сообщения: 791
Стаж: 8 лет 7 месяцев
Откуда: Израиль
Благодарил (а): 259 раз
Поблагодарили: 96 раз

Re: [3.2][3.3] Вставка картинок

Сообщение Leo Angel »

Leo Angel писал(а): Вчера 15:15 На фотохостинге лежат примерно 170 тысяч картинок.
Это оригиналы. Ещё там же столько же превью.
Итого получается около 350К изображений.
Свой фотохостинг это дорого, но всё же лучше, чем хранить неизвестно где и у кого и с непонятной политикой (сегодня очистили, завтра нашли на сервере вирусы и очистили, послезавтра вообще закрыли). Тут каждый выбирает по своему усмотрению и по своим финансовым возможностям.

Мы (форумы) всё равно уже не переплюнем всякие Инстаграмы с Фейсбуками. Люди ушли туда, но если мы не дадим оставшимся пользователям разумное качество и вменяемые инструменты, то вообще останемся без посетителей.
PredatorZ
phpBB 1.4.0
Сообщения: 36
Стаж: 10 лет 6 месяцев
Благодарил (а): 3 раза

Re: [3.2][3.3] Вставка картинок

Сообщение PredatorZ »

Leo Angel писал(а): Вчера 15:15Верно?
Не надо натягивать свою сову на мой глобус. На моем форуме это просто НЕ ТРЕБУЕТСЯ.
Я же не рассказываю. что и как делать вам ?
Я вопрос какой задавал ?
Аватара пользователя
Leo Angel
phpBB 2.0.10
Сообщения: 791
Стаж: 8 лет 7 месяцев
Откуда: Израиль
Благодарил (а): 259 раз
Поблагодарили: 96 раз

Re: [3.2][3.3] Вставка картинок

Сообщение Leo Angel »

PredatorZ, да нет проблем!
Натягивайте свою сову на свой глобус сами!
PredatorZ писал(а): Вчера 19:34 ...На моем форуме это просто НЕ ТРЕБУЕТСЯ...
Ну и не нужно.
Если Вам не интересно мнение других, то к чему тогда эта тема?

На этом общение в ЭТОЙ теме завершаю!
Решайте свои проблемы сами.
PredatorZ
phpBB 1.4.0
Сообщения: 36
Стаж: 10 лет 6 месяцев
Благодарил (а): 3 раза

Re: [3.2][3.3] Вставка картинок

Сообщение PredatorZ »

Leo Angel писал(а): Вчера 20:25 Если Вам не интересно мнение других, то к чему тогда эта тема?
Ну вот, вам уже не понятно, а мне не интересно.
Вы действительно посчитали, что я тупорылый, и не могу догадаться о том, что можно купить еще пространства на хостинге, чтобы туда картинки могли загружать ?
Leo Angel писал(а): Вчера 20:25 На этом общение в ЭТОЙ теме завершаю!
Решайте свои проблемы сами.
Дак я вас и не просил решать проблему ВАШИМ способом.
Если вы не читаете, про что было написано...То это ваша проблема.
Вы начали отвечать и решать вопрос, который МНОЙ не задавался...
Судя по тому, что вы писали, вы этого до сих пор не поняли.
Вы сами придумали свою проблему, героически её решили, меня обвинили в том, о чем я вообще ничего не говорил, испортили себе настроение.... И я еще при этом виноват ? ))))

Где логика ? )))))
Аватара пользователя
Михаил Молчанов
phpBB 1.4.4
Сообщения: 181
Стаж: 2 года 1 месяц
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 7 раз

Re: [3.2][3.3] Вставка картинок

Сообщение Михаил Молчанов »

Форум поддерживает такие фото файлы? jfif
Создал и раскручиваю свой форум! :D

Изображение

Вернуться в «Запросы расширений для phpBB»