Ответы пользователя по тегу PHP
  • Рефакторинг кода. Как оптимизировать количество 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;
    }
    Ответ написан
    Комментировать
  • Бесконечная загрузка страницы 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

    Сервер же в любом случае использует енкодер и декодер (от этого не избавишься).
    Ответ написан
  • Как добавить 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 комментариев