• Рефакторинг кода. Как оптимизировать количество if?

    MaxAlexQNEI
    @MaxAlexQNEI
    Web-Developer
    Ответы выше имеют для вас полезную информацию как и ответ на вопрос.
    Однако вот еще мнение, что бы оптимизировать ваш (возможно) пример кода:

    $type = $message->getType();
    
    if ('text' === $type) {
        // code
    }
    if ('poll' === $type) {
        // code
    }
    if ('image' === $type) {
        // code
    }


    Можно использовать еще else if или return что бы проверки дальше не имели значения...

    $type = $message->getType();
    
    if ('text' === $type) {
        // code
    } else if ('poll' === $type) {
        // code
    } else if ('image' === $type) {
        // code
    }


    or

    $type = $message->getType();
    
    if ('text' === $type) {
        // code
        return;
    }
    if ('poll' === $type) {
        // code
        return;
    }
    if ('image' === $type) {
        // code
        return;
    }
    Ответ написан
    Комментировать
  • Как менять HTML элементы местами с помощью JS?

    MaxAlexQNEI
    @MaxAlexQNEI
    Web-Developer
    То что вам нужно - insertBefore (MDN)
    <section class="wrapper">
       <div class="item">Блок 1</div>
       <div class="item">Блок 2</div>
       <div class="item">Блок 3</div>
       <div class="item">Блок 4</div>
       <div class="item">Блок 5</div>
    </section>


    var itemListParent = document.querySelector('.wrapper');
    var itemList = document.querySelectorAll('.item');
    
    // сработает как appendChild (т.к. второй аргумент null) - поместит второй элемент в конец родительского.
    itemListParent.insertBefore(itemList[1], null);
    
    // сработает как того предполагает insertBefore() - вставит пятый элемент перед первым
    itemListParent.insertBefore(itemList[4], itemList[0]);


    Плюс применения insertBefore (или appendChild) в том, что прикрепленные слушатели к элементу не сотрутся как в случае использования innerHTML.
    Ответ написан
    1 комментарий
  • Как добавить class для картинки в этом скрипте?

    MaxAlexQNEI
    @MaxAlexQNEI
    Web-Developer
    1.
    div.innerHTML = "<img class=\"img-list-itam\" src='" + e.target.result + "' />";


    2.
    ...
    var div = document.createElement('div'), img;
    div.innerHTML = "<img src='" + e.target.result + "' />";
    
    img = div.children[0];
    
    img.className = img.className.split( " " );
    img.className.push( "img-list-itam" );
    img.className = classes.join( " " );
    
    document.getElementById('list').insertBefore(div, null);
    ...
    Ответ написан
    2 комментария
  • Бесконечная загрузка страницы websocket?

    MaxAlexQNEI
    @MaxAlexQNEI
    Web-Developer
    То что вы представили это просто общение двух клиентов через консоль системы.
    WebSocket намного хитрее.

    Вебсокет подозревает использование WebSocket на JavaScript. А WebSocket сервер пишется и запускается на PHP.

    Вот PHP-сокет сервер:

    define( "E", PHP_EOL );
    define( "E2", E . E );
    define( "TAB", "\t" );
    define( "STAB", "\s\s\s\s" );
    define( "START", microtime() );
    define( "ROOT", dirname( __FILE__ ) . "/" );
    
    //define( "SOCK_ADDR", "46.149.84.91" );
    define( "SOCK_ADDR", "192.168.0.2" );
    define( "SOCK_PORT", 2424 );
    
    ob_start();
    ob_implicit_flush( TRUE );
    set_time_limit( 0 );
    ini_set( "date.timezone", "Europe/Kiev" );
    ini_set( "display_errors", TRUE );
    ini_set( "error_reporting", E_ERROR );
    //ini_set( "output_buffering", TRUE );
    
    header( "Content-Type: text/plain; charset=UTF-8" );
    
    // AF_INET - 2
    // SOCK_STREAM - 1
    // SOL_TCP - 6
    if( ( $socket = socket_create( 2, 1, 6 ) ) === FALSE ) {
        socket_return( "ERROR#0000: " . socket_strerror( socket_last_error( $socket ) ) );
    } else {
        socket_return( "SOCKET SERVER is RUNNING" );
    }
    
    if( socket_bind( $socket, SOCK_ADDR, SOCK_PORT ) === FALSE ) {
        socket_return( "ERROR#0001: " . socket_strerror( socket_last_error( $socket ) ) );
    } else {
        socket_return( "SOCKET SERVER is ATTACHED" );
    }
    
    if( socket_listen( $socket, 64 ) === FALSE ) {
        socket_return( "ERROR#0002: " . socket_strerror( socket_last_error( $socket ) ) );
    } else {
        socket_return( "SOCKET SERVER is LISTENING" );
    }
    
    $abort = FALSE;
    $clients = [];
    $buffer_size = 2048;
    
    $ms = 50;
    $nano = $ms * 1e6;
    
    socket_return( "BUFFER SIZE = {$buffer_size} bytes" );
    
    while( !$abort ) {
        time_nanosleep( 0, $nano );
        
        $read = $clients;
        $read[] = $socket;
        $write = $except = NULL;
        
        if( !socket_select( $read, $write, $except, NULL ) ) {
            break;
        }
        
        if( in_array( $socket, $read ) ) {
            $clients[] = $client = socket_accept( $socket );
            unset( $read[ array_search( $socket, $read ) ] );
            socket_return( "New connection! {$client}" );
        }
        
        foreach( $read as $client ) {
            $buffer = rtrim( socket_read( $client, $buffer_size ) );
            
            if( empty( $buffer ) ) {
                socket_close( $client );
                unset( $clients[ array_search( $client, $clients ) ] );
                socket_return( "«{$client}» buffer: {$buffer}" );
                socket_return( "«{$client}» disconnected!" );
                continue;
            }
            
            socket_return( "«{$client}» say's: {$buffer}" );
        }
    }
    
    function socket_return( $text, $datetime = TRUE ) {
        echo $output = ( $datetime ? "[". date( "Y-m-d H:i:s" ) ."]" : NULL ) ." {$text}" . E;
        ob_flush();
        return $output;
    }


    Это так сказать собранный мною сокет-сервер из немалого количества статей из интернета.
    А ВебСокет это еще больший "МАРАЗМ". Так как ВебСокет это общение из JavaScript объекта WebSocket с PHP-сокет сервером.

    В этом JS WebSocket есть хитрость. Нужно писать энкодер-декодер. Так как общение происходит с помощью маски (от перехвата данных).

    Вот ссылка на RFC - https://tools.ietf.org/html/rfc6455#section-5.2
    Без энкодера-декодера - веб-сокета у Вас нет.

    Код который я представил выше. Если у меня ноутбук не выключен. Вы можете подключится к серверу. Например, через терминал Linux: telnet 46.149.84.91 2424

    А вот на Windows телнет походу бажит, так как отправка происходит по нажатию любой клавиши - а не после нажания Enter.

    Тот сервер что я представил принимает до 64 клиентов (включительно).

    Вот еще пример. Игра Agar.io - agar.io
    Она так же использует WebSocket и убедится можно посмотрев один из JS-скриптов view-source:agar.io/main_out.js?v=34

    Сервер же в любом случае использует енкодер и декодер (от этого не избавишься).
    Ответ написан
  • Как расшифровывается аббревиатура tty?

    MaxAlexQNEI
    @MaxAlexQNEI
    Web-Developer
    Tele-Type. Подсистема Unix "контроллер"
    Посылает команду и читает ответ компьютера.

    По моему еще называют TTY-абстракция
    Ответ написан
    Комментировать
  • Как добавить html внутрь php?

    MaxAlexQNEI
    @MaxAlexQNEI
    Web-Developer
    Простейший вариант по вашему коду ...
    <?php echo '<div class="label-success">' . (get_post_meta($post->ID, 'user_submit_name', $single = true)) . '</div>'; ?>


    А вообще делайте так как Вам удобно ;)

    WordPress? Как же он меня задолбал на работе))
    Ответ написан
  • Почему удаляются пустые элементы массива?

    MaxAlexQNEI
    @MaxAlexQNEI
    Web-Developer
    Так и должно быть. Если в массиве подаваемом в json_encode есть недопустимые символы вроде кириллицы - json_encode преобразует их в UTF-8.

    Для json_encode вторым аргументов можно задать параметр JSON_UNESCAPED_UNICODE - перестаёт кодировать многобайтные символы Unicode.

    json_encode( $array, JSON_UNESCAPED_UNICODE ); // От PHP 5.4.0


    По личной практике скажу - на некоторых проектах (с которыми я работал), весь проект использовал CP1251 (Windows-1251), из за этого json_encode() может работать не корректно и тем более с параметром JSON_UNESCAPED_UNICODE
    Ответ написан
    6 комментариев
  • Custom post type and permalink?

    MaxAlexQNEI
    @MaxAlexQNEI
    Web-Developer
    Скорее всего в файле .htaccess в регулярном выражении не указан символ «-» (минус).

    А строчка скорее будет начинаться примерно с такого:
    RewriteRule ^([A-z0-9\_]+)$ /index.php?post=$1

    В роде этого, в регулярное выражение надо будет добавить знак минуса, т.е. так:
    RewriteRule ^([A-z0-9\_\-]+)$ /index.php?post=$1

    Я думаю проблема скрывается в этом.
    Ответ написан
  • Как правильно настроить доступ vsftpd для локальных пользователей?

    MaxAlexQNEI
    @MaxAlexQNEI
    Web-Developer
    Антон Маневский, обратите внимание на данный комментарий и комментарий который написан в самом начале файла /etc/vsftpd.conf !!!

    ...
    # READ THIS: This example file is NOT an exhaustive list of vsftpd options.
    # Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
    # capabilities.
    ...


    Чётко и ясно написано "... This example file is an ex...", т.е. этот этот файл стандартно содержит НЕ рабочий (вообще рабочий) пример, но его (пример) нельзя использовать. Прочитайте vsftpd.conf.5 "познающую страничку" где вы полностью осознаете все опции vsftpd.

    Короче, в терминале (у меня Ubuntu 14.04.1 LTS на VPS) пишем:
    man vsftpd.conf 5
    После жмём Enter и получаем список всех опций а так же общее описание к этому конфигурационному файлу.

    У меня всё на английском, но знаний моего английского достаточно чтобы установить нужные мне опции.

    Если ВАМ не доступен для понимания материал из man vsftpd.conf 5, вот перевод многих опций: www.opennet.ru/base/net/vsftpd_overview.txt.html
    Ответ написан
    Комментировать