форум vBSupport.ru > vBulletin > vBulletin 4.2.x > Вопросы по vBulletin 4.2.x
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'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
Whity
Специалист
 
Whity's Avatar
Default error: Неверный адрес
3

Недавно на форуме, пользователи стали жаловаться, что нельзя по ссылки "Скачать удалённый файл и сохранить локально" (картинки), долго не мог найти в чём причина. Сначала просто тупа выключил эту функцию. Но когда такая же проблема возникла на другом форуме (где только был установлен чистый форум) начал искать. И выяснил, что эта проблема возникла после установки последнего 4.2.2 Patch Level 2 ( на другом чистом форуме такая же версия стоит)
среди изменённых файлов 4.2.2 Patch Level 2 был такой class_vurl.php, который лежит в папке includes.

посмотрев изменения, нашёл, что помимо других изменений был убран класс fsockopen

то есть вместо этого
PHP Code:
var $classnames = array('cURL''fsockopen'); 
было это
PHP Code:
var $classnames = array('cURL'); 
и удалён этот кусок

PHP Code:
class vB_vURL_fsockopen
{
    
/**
    * String that holds the cURL callback data
    *
    * @var    string
    */
    
var $response_text '';

    
/**
    * String that holds the cURL callback data
    *
    * @var    string
    */
    
var $response_header '';

    
/**
    * vB_vURL object
    *
    * @var    object
    */
    
var $vurl null;

    
/**
    * Filepointer to the temporary file
    *
    * @var    resource
    */
    
var $fp null;

    
/**
    * Length of the current response
    *
    * @var    integer
    */
    
var $response_length 0;

    
/**
    * If the current result is when the max limit is reached
    *
    * @var    integer
    */
    
var $max_limit_reached false;

    
/**
    * Constructor
    *
    * @param    object    Instance of a vB_vURL Object
    */
    
function vB_vURL_fsockopen(&$vurl_registry)
    {
        if (!
is_a($vurl_registry'vB_vURL'))
        {
            
trigger_error('Direct Instantiation of ' __CLASS__ ' prohibited.'E_USER_ERROR);
        }
        
$this->vurl =& $vurl_registry;
    }

    
/**
     * Tests sockets for ssl support.
     *
     * @return    bool    Success
     *
     */
    
function test_ssl()
    {
        return 
function_exists('openssl_open');
    }

    
/**
    * Clears all previous request info
    */
    
function reset()
    {
        
$this->response_text '';
        
$this->response_header '';
        
$this->response_length 0;
        
$this->max_limit_reached false;
    }

    
/**
    * Inflates the response if its gzip or deflate
    */
    
function inflate_response($type)
    {
        if (!empty(
$this->response_text))
        {
            switch(
$type)
            {
                case 
'gzip':
                    if (
$this->response_text[0] == "\x1F" AND $this->response_text[1] == "\x8b")
                    {
                        if (
$inflated = @gzinflate(substr($this->response_text10)))
                        {
                            
$this->response_text $inflated;
                        }
                    }
                break;
                case 
'deflate':

                    if (
$this->response_text[0] == "\x78" AND $this->response_text[1] == "\x9C" AND $inflated = @gzinflate(substr($this->response_text2)))
                    {
                        
$this->response_text $inflated;
                    }
                    else if (
$inflated = @gzinflate($this->response_text))
                    {
                        
$this->response_text $inflated;
                    }
                break;
            }
        }
        else
        {
            
$compressed_file $this->vurl->tmpfile;
            if (
$gzfp = @gzopen($compressed_file'r'))
            {
                if (
$newfp = @fopen($this->vurl->tmpfile 'u''w'))
                {
                    
$this->vurl->tmpfile $this->vurl->tmpfile 'u';
                    if (
function_exists('stream_copy_to_stream'))
                    {
                        
stream_copy_to_stream($gzfp$newfp);
                    }
                    else
                    {
                        while(!
gzeof($gzfp))
                        {
                            
fwrite($fpgzread($gzfp20480));
                        }
                    }

                    
fclose($newfp);
                }

                
fclose($gzfp);
                @
unlink($compressed_file);
            }
        }
    }

    
/**
    * Callback for handling the request body
    *
    * @param    string        Request
    *
    * @return    integer        length of the request
    */
    
function callback_response($response)
    {
        
$chunk_length strlen($response);

        
// no filepointer and we're using or about to use more than 100k
        
if (!$this->fp AND $this->response_length $chunk_length >= 1024*100)
        {
            if (
$this->fp = @fopen($this->vurl->tmpfile'wb'))
            {
                
fwrite($this->fp$this->response_text);
                unset(
$this->response_text);
            }
        }

        if (
$response)
        {
            if (
$this->fp)
            {
                
fwrite($this->fp$response);
            }
            else
            {
                
$this->response_text .= $response;

            }
        }

        
$this->response_length += $chunk_length;

        if (
$this->vurl->options[VURL_MAXSIZE] AND $this->response_length $this->vurl->options[VURL_MAXSIZE])
        {
            
$this->max_limit_reached true;
            
$this->vurl->set_error(VURL_ERROR_MAXSIZE);
            return 
false;
        }

        return 
$chunk_length;
    }

    
/**
    * Performs fetching of the file if possible
    *
    * @return    integer        Returns one of two constants, VURL_NEXT or VURL_HANDLED
    */
    
function exec()
    {
        static 
$location_following_count 0;

        
$urlinfo $this->vurl->registry->input->parse_url($this->vurl->options[VURL_URL]);
        if (empty(
$urlinfo['port']))
        {
            if (
$urlinfo['scheme'] == 'https')
            {
                
$urlinfo['port'] = 443;
            }
            else
            {
                
$urlinfo['port'] = 80;
            }
        }

        if (empty(
$urlinfo['path']))
        {
            
$urlinfo['path'] = '/';
        }

        if (
$urlinfo['scheme'] == 'https')
        {
            if (!
function_exists('openssl_open'))
            {
                
$this->vurl->set_error(VURL_ERROR_SSL);
                return 
VURL_NEXT;
            }
            
$scheme 'ssl://';
        }

        if (
$request_resource = @fsockopen($scheme $urlinfo['host'], $urlinfo['port'], $errno$errstr$this->vurl->options[VURL_TIMEOUT]))
        {
            
$headers = array();
            if (
$this->vurl->bitoptions VURL_NOBODY)
            {
                
$this->vurl->options[VURL_CUSTOMREQUEST] = 'HEAD';
            }
            if (
$this->vurl->options[VURL_CUSTOMREQUEST])
            {
                
$headers[] = $this->vurl->options[VURL_CUSTOMREQUEST] . $urlinfo[path]. ($urlinfo['query'] ? "?$urlinfo[query]'') . " HTTP/1.0";
            }
            else if (
$this->vurl->bitoptions VURL_POST)
            {
                
$headers[] = "POST $urlinfo[path]. ($urlinfo['query'] ? "?$urlinfo[query]'') . " HTTP/1.0";
                if (empty(
$this->vurl->headerkey['content-type']))
                {
                    
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
                }
                if (empty(
$this->vurl->headerkey['content-length']))
                {
                    
$headers[] = 'Content-Length: ' strlen($this->vurl->options[VURL_POSTFIELDS]);
                }
            }
            else
            {
                
$headers[] = "GET $urlinfo[path]. ($urlinfo['query'] ? "?$urlinfo[query]'') . " HTTP/1.0";
            }
            
$headers[] = "Host: $urlinfo[host]";
            if (!empty(
$this->vurl->options[VURL_HTTPHEADER]))
            {
                
$headers array_merge($headers$this->vurl->options[VURL_HTTPHEADER]);
            }
            if (
$this->vurl->options[VURL_ENCODING])
            {
                
$encodemethods explode(','$this->vurl->options[VURL_ENCODING]);
                
$finalmethods = array();
                foreach (
$encodemethods AS $type)
                {
                    
$type strtolower(trim($type));
                    if (
$type == 'gzip' AND function_exists('gzinflate'))
                    {
                        
$finalmethods[] = 'gzip';
                    }
                    else if (
$type == 'deflate' AND function_exists('gzinflate'))
                    {
                        
$finalmethods[] = 'deflate';
                    }
                    else
                    {
                        
$finalmethods[] = $type;
                    }
                }

                if (!empty(
$finalmethods))
                {
                    
$headers[] = "Accept-Encoding: " implode(', '$finalmethods);
                }
            }

            
$output implode("\r\n"$headers) . "\r\n\r\n";
            if (
$this->vurl->bitoptions VURL_POST)
            {
                
$output .= $this->vurl->options[VURL_POSTFIELDS];
            }

            
$result false;

            if (
fputs($request_resource$outputstrlen($output)))
            {
                
stream_set_timeout($request_resource$this->vurl->options[VURL_TIMEOUT]);
                
$in_header true;
                
$result true;

                while (!
feof($request_resource))
                {
                    
$response = @fread($request_resource2048);

                    if (
$in_header)
                    {
                        
$header_end_position strpos($response"\r\n\r\n");

                        if (
$header_end_position === false)
                        {
                            
$this->response_header .= $response;
                        }
                        else
                        {
                            
$this->response_header .= substr($response0$header_end_position);
                            
$in_header false;
                            
$response substr($response$header_end_position 4);
                        }
                    }

                    if (
$this->callback_response($response) != strlen($response))
                    {
                        
$result false;
                        break;
                    }
                }
                
fclose($request_resource);
            }

            if (
$this->fp)
            {
                
fclose($this->fp);
                
$this->fp null;
            }

            if (
$result !== false OR (!$this->vurl->options[VURL_DIEONMAXSIZE] AND $this->max_limit_reached))
            {
                if (
$this->vurl->bitoptions VURL_FOLLOWLOCATION AND preg_match("#\r\nLocation: (.*)(\r\n|$)#siU"$this->response_header$location) AND $location_following_count $this->vurl->options[VURL_MAXREDIRS])
                {
                    
$location_following_count++;
                    
$this->vurl->set_option(VURL_URLtrim($location[1]));
                    
$this->reset();
                    return 
$this->exec();
                }

                
// need to handle gzip if it was used
                
if (function_exists('gzinflate'))
                {
                    if (
stristr($this->response_header"Content-encoding: gzip\r\n") !== false)
                    {
                        
$this->inflate_response('gzip');
                    }
                    else if (
stristr($this->response_header"Content-encoding: deflate\r\n") !== false)
                    {
                        
$this->inflate_response('deflate');
                    }
                }

                return 
VURL_HANDLED;
            }
        }
        return 
VURL_NEXT;
    }


при возврате этого класса , начинает работать загрузка файлов (картинок)

Last edited by Whity : 12-04-2014 at 03:16 PM.
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
Konkere
Знаток
 
Konkere's Avatar
Default
1

Quote:
Originally Posted by Whity View Post
посмотрев изменения, нашёл, что помимо других изменений был убран класс fsockopen
Он изменён, теперь это class vB_vURL_cURL
Проверил на чистом форуме (без хаков), у меня всё работает, без изменений.
 
 
Luvilla
Гость
Default

@Whity, у меня тоже есть парочка чистых 4.2.2 PL2 и там всё прекрасно работает
cURL отсутсвует на сервере, вот она у тебя и не работала, такая загрузка
 
 
Luvilla
Гость
Default

беру свои слова назад... (про курла)
резюме: разрабы - .... ***** ..... ну, все сами знают)

Только что перенесла на другой хост 4ку, 4.2.2 PL2, на которой ещё с утра без вопросов загружались картинки по ссылке
теперь они не грузятся
мирохост
 
 
Whity
Специалист
 
Whity's Avatar
Default
0

Вот вот...



Quote:
Originally Posted by Luvilla View Post
резюме: разрабы - .... ***** ..... ну, все сами знают)
+100500


на моём сервере есть cURL, но картинки не грузится.
 
 
Luvilla
Гость
Default

короткая версия: у кого на 4.2.2 PL_2 не работает загрузка картинок по ссылке, выход пока один: залить файл /includes/class_vurl.php от PL_1
если, конечно, она жизненно нужна, такая загрузка... не нужна - просто запретите, чтобы юзера не нарывались на дурное сообщение "Неверный адрес"
у кого работает... не дёргайтесь

Будем ждать, что по этому поводу расскажут высокооплачиваемые девелоперы

Проблема не в cURL или его версии, как может показаться с первого взгляда
дело там в настройке open_basedir
 
 
Konkere
Знаток
 
Konkere's Avatar
Default
0

Quote:
Originally Posted by Luvilla View Post
Будем ждать, что по этому поводу расскажут высокооплачиваемые девелоперы
Luvilla, начиная с 4.2.2pl2 только cURL, сокеты их чем-то напрягли
Quote:
Paul M added a comment - 14/Nov/14 04:34 PM
Please confirm cURL is installed and working, as noted above, vURL (using fsockopen) was removed.
 
 
Luvilla
Гость
Default

Quote:
Originally Posted by Konkere View Post
только cURL
который в вобле просто не работает
он и раньше не работал, до 4.2.2 PL2, только этого никто не знал, она уходила на сокет
а теперь - фигушки

Quote:
Originally Posted by Paul M
Please confirm cURL is installed and working
он и инсталлед, и воркинг, только open_basedir закрыт, "а в остальном, прекрасная маркиза, всё хорошо, всё хорошо..."
 
 
Konkere
Знаток
 
Konkere's Avatar
Default
0

Quote:
Originally Posted by Luvilla View Post
он и инсталлед, и воркинг, только open_basedir закрыт
Что значит закрыт?
;open_basedir =
так?
 
 
UniversalUserIS
Специалист
 
UniversalUserIS's Avatar
Default
0

Luvilla, на vB 4.2.3 Beta 3 cURL работает.
 

Tags
open_basedir, upload_tmp_dir


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:01 AM.


Powered by vBulletin® Version 3.0.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.