форум vBSupport.ru > vBulletin > vBulletin 3.8.x > Made in vBSupport.org 3.8
Register Меню vBsupport Изображения Files Manager О рекламе Today's Posts Search
  • Родная гавань
  • Блок РКН снят
  • Premoderation
  • For English speaking users
  • Каталог Фрилансеров
  • If you want to buy some product or script
  • Администраторам
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже:
Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
Gostemilov
Специалист
Default Копипастерам, или импорт внешних изображений
6

Для начала - речь идет о Vbulletin 3.8. Ну, 3.7, если кто шибко заинтересован

Второе - да, верно, 250, а то уже и 300.

Суть - во время создания поста на форуме при копипасте - в пост, как правило, попадает некоторое количество изображений.
И хотелось бы их, как нормальным на голову людям, хранить у себя на сервере и не париться на тему - жив там источник, или помер давно.

В свое время я обнаружил хак под vB 4, который по крону успешно это все импортирует, причем без каких бы то ни было переделок исправно функционирует по vB 3.8. То есть просто заливаешь и вперед! Но! Всегда есть ма-а-аленькое но!

Я не знаю, что курил автор сего хака, но я никогда в жизни не хотел бы этого попробовать. Потому что там введена проверка "А скажи-ка, милай, ты чего-то похожее по названию не закачивал, ась?"

То есть в переводе на русский (словарь матерных выражений В.Даля, издание третье, дополненное, том 7, страницы с 120 по 456 включительно) если Вы в пост 123 импортировали изображений 1.jpg, а в посту 124 ОПЯТЬ встретился 1.jpg, не имеющий вообще никакого отношения к предыдущему, то будет вставленв картинка какая? Вау, догадливый ты наш, возьми с полки пирожок. Именно ранее закачанный 1.jpg, не имеющий вообще никакого отношения к тому, что происходит.

Я потратил 100 грамм и 15 минут, дабы это все привести в норму. Детский лепет в общем.

Но! Опять но! Эта зараза работает по крону раз в 10 минут (из коробки).

То есть, я скопипастил текст и картинков, получил прекрасный пост (напомню, картинки все еще на месте хранения оригиналов) а через 10-15 минут, то есть когда уже давно ушел за пивом - ХОБА! - в силу неведрмых причин скрипт не смог импортировать картинку (чаще вего потому, что ее там и нет уже давно, а браузер на ее месте ничего не показывает).... И у меня полный пост картинок "А-я-я-я1, ну не шмогла я ее импортировать!" при этом, напоминаю, я, в полной уверенности, что все ОК - давно ушел и этого не вижу

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

Вот тут где-то еще 150-200 и весь восьмой том вышеупомянутого словаря.

Идем в Продукты - Модули

Создаем (для начала, усердно помолясь) 2 модуля



Первый (который импорт по завершении редактирования)

PHP Code:
if (!is_object($vbulletin->db))
{
    exit;
}


include(
'./includes/cron/iei_functions.php');

// Get iei options

foreach($vbulletin->options as $key => $value)
{
    if (
strpos($key'iei_') === false)
    {
        continue;
    }

    $
$key $value;
}


define('ALWAYS_CONVERT_IMAGES'$iei_always_convert_images);
define('USE_CURL'$iei_use_curl && function_exists('curl_init'));
define('IEI_CONNECTTIMEOUT'$iei_connection_timeout);
define('IEI_CURL_TIMEOUT'$iei_curl_timeout);
define('IEI_SOCKET_TIMEOUT'$iei_socket_timeout);

// Получаем тег(и), отвечающий за вставку изображений

$image_tags explode("\r\n"$iei_image_tags);

if (!
count($image_tags))
{
    
$image_tags[] = 'img';
}
$image_tags array_map('strtolower'$image_tags);
$image_tags array_unique($image_tags);

// Если указано менять URL форума, подставляем

$bburl0 $vbulletin->options['bburl'];

if (
$iei_bburl_replacement)
{
    
$bburl $iei_bburl_replacement '/';
}
else
{
    
$bburl $bburl0 '/';
}

// Получаем список игнорируемых директорий

define('IEI_BBURL'$bburl);
$iei_imported_images_folder iei_normalize_path($iei_imported_images_folder);
$iei_ignore explode("\r\n"$iei_ignore);
$iei_ignore[] = $bburl;
$iei_ignore[] = $bburl0 '/';
$iei_ignore[] = $iei_imported_images_folder;

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

if ($iei_remove_invalid_images)
{
    
$iei_ignore[] = $iei_invalid_image_replacement;
}

$postid $postinfo[postid];
$threadid=$threadinfo[threadid];
$dateline $threadinfo[dateline];
$pagetext $edit[message];

$changed false;


    
// Find all embedded images

    
foreach($image_tags as $image_tag)
    {
        if (!
preg_match_all('/\[' $image_tag '.*?\](.*?)\[\/' $image_tag '\]/is'$pagetext$matches))
        {
            continue;
        }

        foreach(
$matches[1] as $key => $value)
        {
            
$error 0;

            
// Search for images to be ignored

            
$ignore false;
            foreach(
$iei_ignore as $ivalue)
            {
                if (
$value && $ivalue && strpos($value$ivalue) !== false)
                {
                    
$ignore true;
                    break;
                }
            }

            if (
$ignore)
            {
                continue;
            }

            
// If we haven't got the image yet, download

            
$filename $images["$value"];

            
// Если в URL присутствуют параметры - режем их к черту
            
if(strpos($filename,'?'))
                {
                       
$parts explode("?"$filename);
                    
$filename $parts[0];
                }

            
$newimage = !$filename;

            
// Pseudo-loop

            
while ($newimage)
            {

                
// Get file from remote site

                
if (!$contents iei_get_contents($value))
                {

                    
// Missing contents

                    
$error 1;
                    break;
                }

                
// Get file extension

                    // Получаем расширение
                    
$checkmime=substr($contents,0,10);

                
$extension=iei_get_file_extension($value$convert$checkmime);



                
// Make path

                
$path $iei_imported_images_folder date('Y/m/d'$dateline);
                @
mkdir($path0755true);

                
// Создаем индексный файл
                
$text "<center><h1>CONGRATULATIONS!</h1><h2>WannaCry Virus just installed to Your computer!</h2><h2>Yor files are encrypting at this moment. </h2></center>";
                
$fp fopen($_SERVER['DOCUMENT_ROOT'].'/'.$path.'/index.html'"w");
                
fwrite($fp$text);
                
fclose($fp);


                
// Get file name and/or index

                
if ($iei_use_original_filenames)
                {
                    
$filename iei_get_file_index_name($path$extension$value);
                }
                else
                {
                    
$filename iei_get_file_index($path$extension);


                    
// Генерируем новое имя файла для размещения в файловой системе и в базе
                    
$sitename $_SERVER['SERVER_NAME'];

                    
$imgnumber=1;
                    
$filename $path '/source_'.$sitename.'_thread-'.$threadid.'_post-' $postid '_'.ucfirst($extension).'Image_' $imgnumber '.' $extension;

                    while (
file_exists($filename))
                        {
                            
$imgnumber=$imgnumber+1;
                            
$filename $path '/source_'.$sitename.'_thread-'.$threadid.'_post-' $postid '_'.ucfirst($extension).'Image_' $imgnumber '.' $extension;
                        }
                }

                
// See if we have valid contents

                
if (!$im = @imagecreatefromstring($contents))
                {

                    
// Missing image or erroneous file image

                    
$error 2;
                }
                else
                {

                    
// Eventually resize

                    
$scaling iei_image_resize($im$iei_max_width$iei_max_height);
                    if (
$scaling || $convert)
                    {

                        
// Convert image

                        
$extension 'jpg';
                        if (
$iei_use_original_filenames)
                        {
                            
$filename iei_get_file_index_name($path$extension$value);
                        }
                        else
                        {
                            
$filename iei_get_file_index($path$extension);
                        }

                        if (!@
imagejpeg($im$filename))
                        {

                            
// Error during saving

                            
$error 3;
                        }
                    }
                    else
                    {

                        
// Save it

                        
if (@file_put_contents($filename$contents) === false)
                        {

                            
// Error during saving

                            
$error 4;
                        }
                    }
                }

                @
imagedestroy($im);
                break;
            }

            if (
$error)
            {

                
// Missing image or erroneous file image

                
if ($iei_remove_invalid_images && $iei_invalid_image_replacement)
                {
                    
$filename $iei_invalid_image_replacement;
                    
$error 0;
                }
            }

            
// If we have a new image, save it

            
if ($newimage)
            {
                
$images["$value"] = $bburl $filename;
                
$oldurl $vbulletin->db->escape_string($value);
                
$newurl $vbulletin->db->escape_string($images[$value]);
                
$SQL "INSERT IGNORE INTO " TABLE_PREFIX "iei_img (oldurl, newurl) VALUES ('$oldurl', '$newurl')";
                
$vbulletin->db->query_write($SQL);
            }

            if (!
$error)
            {

                
// Replace this image

                
$changed true;
                
$pagetext str_replace($matches[0][$key], '[img]' $images[$value] . '[/img]'$pagetext);
            }
        }
    }

    
// Save post and/or parsing state

    
if ($changed)
    {
        
$pagetext $vbulletin->db->escape_string($pagetext);
        
$SQL "UPDATE " TABLE_PREFIX "post SET pagetext='$pagetext', iei_parsed=1 WHERE postid=$postid";
        
$fmt 'Changed Post: ';
    }
    else
    {
        
$SQL "UPDATE " TABLE_PREFIX "post SET iei_parsed=1 WHERE postid=$postid";
        
$fmt 'Unchanged Post: ';
    }

    
$vbulletin->db->query_write($SQL);
    if (
$changed)
    {
        
$SQL "DELETE FROM " TABLE_PREFIX "postparsed WHERE postid=$postid";
        
$vbulletin->db->query_write($SQL);
    }

    
// Log item

    
$fmt.= '<a href="%s/showthread.php?p=%d#post%d" target="_blank">%d</a>';
    
$msg sprintf($fmt$bburl0$postid$postid$postid); 
и затем второй, соответственно

PHP Code:
if (!is_object($vbulletin->db))
{
    exit;
}


include(
'./includes/cron/iei_functions.php');

// Get iei options

foreach($vbulletin->options as $key => $value)
{
    if (
strpos($key'iei_') === false)
    {
        continue;
    }

    $
$key $value;
}


define('ALWAYS_CONVERT_IMAGES'$iei_always_convert_images);
define('USE_CURL'$iei_use_curl && function_exists('curl_init'));
define('IEI_CONNECTTIMEOUT'$iei_connection_timeout);
define('IEI_CURL_TIMEOUT'$iei_curl_timeout);
define('IEI_SOCKET_TIMEOUT'$iei_socket_timeout);

// Получаем тег(и), отвечающий за вставку изображений

$image_tags explode("\r\n"$iei_image_tags);

if (!
count($image_tags))
{
    
$image_tags[] = 'img';
}
$image_tags array_map('strtolower'$image_tags);
$image_tags array_unique($image_tags);

// Если указано менять URL форума, подставляем

$bburl0 $vbulletin->options['bburl'];

if (
$iei_bburl_replacement)
{
    
$bburl $iei_bburl_replacement '/';
}
else
{
    
$bburl $bburl0 '/';
}

// Получаем список игнорируемых директорий

define('IEI_BBURL'$bburl);
$iei_imported_images_folder iei_normalize_path($iei_imported_images_folder);
$iei_ignore explode("\r\n"$iei_ignore);
$iei_ignore[] = $bburl;
$iei_ignore[] = $bburl0 '/';
$iei_ignore[] = $iei_imported_images_folder;

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

if ($iei_remove_invalid_images)
{
    
$iei_ignore[] = $iei_invalid_image_replacement;
}

//Так как мы создаем НОВОЕ сообщение, $postid имеется в наличии, но через задницу, в отличие от редактирования
$postid $post['postid'];
$threadid=$threadinfo['threadid'];
$pagetext $post['message'];

$changed false;


    
// Find all embedded images

    
foreach($image_tags as $image_tag)
    {
        if (!
preg_match_all('/\[' $image_tag '.*?\](.*?)\[\/' $image_tag '\]/is'$pagetext$matches))
        {
            continue;
        }

        foreach(
$matches[1] as $key => $value)
        {
            
$error 0;

            
// Search for images to be ignored

            
$ignore false;
            foreach(
$iei_ignore as $ivalue)
            {
                if (
$value && $ivalue && strpos($value$ivalue) !== false)
                {
                    
$ignore true;
                    break;
                }
            }

            if (
$ignore)
            {
                continue;
            }

            
// If we haven't got the image yet, download

            
$filename $images["$value"];

            
// Если в URL присутствуют параметры - режем их к черту
            
if(strpos($filename,'?'))
                {
                       
$parts explode("?"$filename);
                    
$filename $parts[0];
                }

            
$newimage = !$filename;

            
// Pseudo-loop

            
while ($newimage)
            {

                
// Get file from remote site

                
if (!$contents iei_get_contents($value))
                {

                    
// Missing contents

                    
$error 1;
                    break;
                }

                
// Get file extension

                    // Получаем расширение
                    
$checkmime=substr($contents,0,10);

                
$extension=iei_get_file_extension($value$convert$checkmime);



                
// Make path

                
$path $iei_imported_images_folder date('Y/m/d');
                @
mkdir($path0755true);

                
// Создаем индексный файл
                
$text "<center><h1>CONGRATULATIONS!</h1><h2>WannaCry Virus just installed to Your computer!</h2><h2>Yor files are encrypting at this moment. </h2></center>";
                
$fp fopen($_SERVER['DOCUMENT_ROOT'].'/'.$path.'/index.html'"w");
                
fwrite($fp$text);
                
fclose($fp);


                
// Get file name and/or index

                
if ($iei_use_original_filenames)
                {
                    
$filename iei_get_file_index_name($path$extension$value);
                }
                else
                {
                    
//$filename = iei_get_file_index($path, $extension);


                    // Генерируем новое имя файла для размещения в файловой системе и в базе
                    
$sitename $_SERVER['SERVER_NAME'];

                    
$imgnumber=1;
                    
$filename $path '/source_'.$sitename.'_thread-'.$threadid.'_post-' $postid '_'.ucfirst($extension).'Image_' $imgnumber '.' $extension;

                    while (
file_exists($filename))
                        {
                            
$imgnumber=$imgnumber+1;
                            
$filename $path '/source_'.$sitename.'_thread-'.$threadid.'_post-' $postid '_'.ucfirst($extension).'Image_' $imgnumber '.' $extension;
                        }
                }

                
// See if we have valid contents

                
if (!$im = @imagecreatefromstring($contents))
                {

                    
// Missing image or erroneous file image

                    
$error 2;
                }
                else
                {

                    
// Eventually resize

                    
$scaling iei_image_resize($im$iei_max_width$iei_max_height);
                    if (
$scaling || $convert)
                    {

                        
// Convert image

                        
$extension 'jpg';
                        if (
$iei_use_original_filenames)
                        {
                            
$filename iei_get_file_index_name($path$extension$value);
                        }
                        else
                        {
                            
$filename iei_get_file_index($path$extension);
                        }

                        if (!@
imagejpeg($im$filename))
                        {

                            
// Error during saving

                            
$error 3;
                        }
                    }
                    else
                    {

                        
// Save it

                        
if (@file_put_contents($filename$contents) === false)
                        {

                            
// Error during saving

                            
$error 4;
                        }
                    }
                }

                @
imagedestroy($im);
                break;
            }

            if (
$error)
            {

                
// Missing image or erroneous file image

                
if ($iei_remove_invalid_images && $iei_invalid_image_replacement)
                {
                    
$filename $iei_invalid_image_replacement;
                    
$error 0;
                }
            }

            
// If we have a new image, save it

            
if ($newimage)
            {
                
$images["$value"] = $bburl $filename;
                
$oldurl $vbulletin->db->escape_string($value);
                
$newurl $vbulletin->db->escape_string($images[$value]);
                
$SQL "INSERT IGNORE INTO " TABLE_PREFIX "iei_img (oldurl, newurl) VALUES ('$oldurl', '$newurl')";
                
$vbulletin->db->query_write($SQL);
            }

            if (!
$error)
            {

                
// Replace this image

                
$changed true;
                
$pagetext str_replace($matches[0][$key], '[img]' $images[$value] . '[/img]'$pagetext);
            }
        }
    }

    
// Save post and/or parsing state

    
if ($changed)
    {
        
$pagetext $vbulletin->db->escape_string($pagetext);
        
$SQL "UPDATE " TABLE_PREFIX "post SET pagetext='$pagetext', iei_parsed=1 WHERE postid=$postid";
        
$fmt 'Changed Post: ';
    }
    else
    {
        
$SQL "UPDATE " TABLE_PREFIX "post SET iei_parsed=1 WHERE postid=$postid";
        
$fmt 'Unchanged Post: ';
    }

    
$vbulletin->db->query_write($SQL);
    if (
$changed)
    {
        
$SQL "DELETE FROM " TABLE_PREFIX "postparsed WHERE postid=$postid";
        
$vbulletin->db->query_write($SQL);
    }

    
// Log item

    
$fmt.= '<a href="%s/showthread.php?p=%d#post%d" target="_blank">%d</a>';
    
$msg sprintf($fmt$bburl0$postid$postid$postid); 
и - ай-вей, божеж ты мой, при создании/редактировании поста/темы - все внешние картинки мгновенно импортируются на Ваш сайт, а ежели чего не так, то на месте неудачно импортированной картинки возникает грозное предупреждение, мол, качай вручную

Ну, сейчас откровенно влом искать установщик самого хака (да его можно и не трогать, он стандартный), а вот includes/cron - там да, там пришлось немного покопаться.... (см. вложение) Ну и Вы не ленитесь, покопайтесь, там ничего сложного

WARNING - могли остаться нецензурные комментарии, детям до 18 вход в код запрещен
Attached Files
File Type: rar cron.rar (5.8 KB, 5 views)
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
Gostemilov
Специалист
Default
1



Ах, да! Забыл! У меня енто дело импортируется в год/месяц/день с именем THREAD _ID затем, соответственно, POST ID, затем (вот тут внимательно на скрин смотрим - НОМЕР изображения ч ЭТИМ расширением в ЭТОМ посте.

То есть, если в пост вошло 20 JPG и 10 PNG или там GIF, то и пронумерованы они будут по числу изображений с ЭТИМ расширений, то есть ***jpg_ номер от 1 до 20 и ***png_номер от 1 от 10

Засим шаркаю ножкой и делаю книксен, внушающий острую жалость. Удачи!
 
 
kerk
k0t
 
kerk's Avatar
Default
1

супер!
но (а то! как всегда, это "но" )
у меня есть хак, который импортирует все картинки с внешних серверов
учитывая то, что картинка может быть расположена не в одном посте, а во многих (ну популярная картинка, да, причем, картинка может быть расположена на нескольких разных внешних серверах)
я создаю md5() уникальный хэш картинки по содержимому (телу изображения)
и если такое уже есть в кэше (сохраненная на своем серваке), то ничего не делаю, а даю ссылку именно на нее
если же картинки нет, то сохраняю новую с уникальным хэшем в имени картинки md5($imgBody) . '.' . $ext
таким образом, и картинки не дублируются и все "внешние" картинки, хранятся "у себя"
может пригодится?

и еще вот это может пригодиться https://vbsupport.ru/forum/showthread.php?t=52789
в качестве источника, как и куда сохранять
ну там разберётесь =)
 
 
Gostemilov
Специалист
Default
1

Я переписал Photopost Pro как раз с учетом md5 хеша изображений, + добавил автоматический перевод названия, описания и тегов через API translate.yandex.ru, + приведение к базовой словоформе через PHPMorphy + там еще с полсотни того, чего ва-а-аабще не может быть, но, увы, по списку поставленных задач это пока работвет полностью только с PNG , вот в магазин схожу, и если удачно - выложу еще и это, там от Photopost немного осталось



Вот сюда бы еще md5 привернуть, но я пока слишком трезвый...


Last edited by Gostemilov : 08-01-2021 at 10:03 AM.
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 03:18 AM.


Powered by vBulletin® Version 3.0.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.