"програмная строка" - средство мгновенного программирования в php

Discussion in 'ПО для Web разработчика' started by ckpunmkug, 10 May 2017.

  1. ckpunmkug

    ckpunmkug Member

    Joined:
    20 Mar 2017
    Messages:
    72
    Likes Received:
    72
    Reputations:
    10
    Архиполезная фигня для одноразового программирования и программирования в реальном времени.
    Сама строка является примером так называемого настоящего хака ( true hack ).
    Можете сами попробовать решить такую задачу средствами php:
    С помощью readline получить строку добавить её в readline history и исполнить её в eval, при этом нельзя использовать переменные.
    Code:
    <?php
    while(true)
        eval
            (
            call_user_func
                (
                function()
                    {
                    readline_add_history(func_get_arg(0));
                    return(func_get_arg(0));
                    },
                readline("<?php ")
                )
            );
    

    Иногда при использовании строки она завершается с ерором, чаще всего это происходит тогда когда ошибаешся с синтаксимом или напишешь неправильно имя функции. Для сохранения переменных и истории заделана функция которая всё сохраняет на выходе. Здесь тоже всё без переменных. И учтите если скрипт не нашел историю и переменные он вам об этом не скажет, но ругнётся на выходе если не сможет сохранить их.

    Code:
    <?php
    register_shutdown_function
        (
        create_function
            (
             ""
            ,<<< 'src'
    readline_write_history( $_SERVER['HOME'].'/.cmpoka/history' );
    file_put_contents( $_SERVER['HOME'].'/.cmpoka/GLOBALS', "<?php\n" );
    
    reset( $GLOBALS );
    while( key( $GLOBALS ) !== NULL
        && current( $GLOBALS ) !== false )
        {
        if
            (
               !in_array
                   (
                    key( $GLOBALS )
                   ,array
                       (
                        'GLOBALS'
                       ,'_SERVER'
                       ,'_GET'
                       ,'_POST'
                       ,'_FILES'
                       ,'_REQUEST'
                       ,'_SESSION'
                       ,'_ENV'
                       ,'_COOKIE'
                       ,'php_errormsg'
                       ,'HTTP_RAW_POST_DATA'
                       ,'http_response_header'
                       ,'argc'
                       ,'argv'
                       )
                   )
             && in_array
                    (
                 gettype( current( $GLOBALS ) )
                ,array
                        (
                         'boolean'
                          ,'integer'
                          ,'double'
                          ,'float'
                          ,'string'
                          ,'array'
                          ,'NULL'
                          )
                    )
            )
            {
            file_put_contents
                (
                 $_SERVER['HOME'].'/.cmpoka/GLOBALS'
                , '$'.key( $GLOBALS )
                 . '='
                 . var_export( current( $GLOBALS ) ,true )
                 . ";\n"
                ,FILE_APPEND
                );
            }
        next( $GLOBALS );
        }
    src
    ));
    
    if( file_exists( $_SERVER['HOME'].'/.cmpoka/history' )
    && is_file( $_SERVER['HOME'].'/.cmpoka/history' ) )
         {
        readline_read_history( $_SERVER['HOME'].'/.cmpoka/history' );
        }
    
    if( file_exists( $_SERVER['HOME'].'/.cmpoka/GLOBALS' )
    && is_file( $_SERVER['HOME'].'/.cmpoka/GLOBALS' ) )
         {
        include( $_SERVER['HOME'].'/.cmpoka/GLOBALS' );
        }
    
    Так же пригодится функция для отображения списка переменных.

    Code:
    <?php
    function print_vars()
        {
        reset($GLOBALS);
        while(key($GLOBALS)!==NULL && current($GLOBALS)!==false)
            {
            if(
            !in_array
                (
                key($GLOBALS),
                array
                    (
                    'GLOBALS',
                    '_SERVER',
                    '_GET',
                    '_POST',
                    '_FILES',
                    '_REQUEST',
                    '_SESSION',
                    '_ENV',
                    '_COOKIE',
                    'php_errormsg',
                    'HTTP_RAW_POST_DATA',
                    'http_response_header',
                    'argc','argv'
                    )
                )
            &&
            in_array
                (
                gettype(current($GLOBALS)),
                array
                    (
                    'boolean',
                    'integer',
                    'double',
                    'float',
                    'string',
                    'array',
                    'NULL'
                    )
                )
            )
                {
                echo('$'.key($GLOBALS).' - '.gettype(current($GLOBALS))."\n" );
                }
            next($GLOBALS);
            }
        }
    
    И парочка функция для более удобной отгрузки загрузки переменных.

    Code:
    <?php
    function export( $file_name, $variable )
        {
        file_put_contents( $file_name, serialize($variable) );
        }
    function import( $file_name )
        {
        return( unserialize( file_get_contents( $file_name ) ) );
        }
    function load_list( $file_name )
        {
        return( file( $file_name, FILE_IGNORE_NEW_LINES ) );
        }
    function save_list( $file_name, $array )
        {
        if( is_array( $array ) )
            {
            $text .= '';
            foreach( $array as $string )
                {
                if( is_string( $string ) )
                    {
                    $text .= $string."\n";
                    }
                }
            return( file_put_contents( $file_name, $text ) );
            }
        else
            {
            return( false );
            }
        }
    function unset_all()
        {
        $names = array(  );
        reset($GLOBALS);
        while(key($GLOBALS)!==NULL && current($GLOBALS)!==false)
            {
            if(
            !in_array
                (
                key($GLOBALS),
                array
                    (
                    'GLOBALS',
                    '_SERVER',
                    '_GET',
                    '_POST',
                    '_FILES',
                    '_REQUEST',
                    '_SESSION',
                    '_ENV',
                    '_COOKIE',
                    'php_errormsg',
                    'HTTP_RAW_POST_DATA',
                    'http_response_header',
                    'argc','argv'
                    )
                )
            &&
            in_array
                (
                gettype(current($GLOBALS)),
                array
                    (
                    'boolean',
                    'integer',
                    'double',
                    'float',
                    'string',
                    'array',
                    'NULL'
                    )
                )
            )
                {
                array_push( $names, key($GLOBALS) );
                }
            next($GLOBALS);
            }
        foreach( $names as $name )
            {
            unset( $GLOBALS[ $name ] );
            }
        }
    
    Вообще я пользуюсь данным инструментом для создания одноразовых программ. Выглядит это примерно так: Загрузил один список, фильтранул, загрузил второй, фильтранул, склеил вместе, посмотрел результат, отгрузил array, отгрузил список.

    Удобно пользоваться комбинацией кода из редактора и из строки.
    Например в редакторе пишем такой код

    Code:
    if( false )
        {
        // Здесь уже ненужный код
        }
    
    if( true )
        {
        // Здесь что-то исполняется изменяются переменные
        }
    
    Затем делаем include файла из редактора в строке, смотрим результаты, подправляем переменные. В общем корректируем результаты исполнения куска кода.

    В целом эта штука довольно сильный инструмент. Например: однажды, буквально за 20 минут и только им, я распаковал dle.
     
    #1 ckpunmkug, 10 May 2017
    Last edited: 14 May 2017
  2. Тот_самый_Щуп

    Тот_самый_Щуп Reservists Of Antichat

    Joined:
    23 Mar 2017
    Messages:
    265
    Likes Received:
    174
    Reputations:
    119
    за 20 минут распаковал DLE, это сильно...
    Пользуйся unzip -C /whost/dle.zip это ещё быстрее
     
  3. ckpunmkug

    ckpunmkug Member

    Joined:
    20 Mar 2017
    Messages:
    72
    Likes Received:
    72
    Reputations:
    10
    Если не знаешь, сиди молча ( pa3BeJLocb nu3ga6oJLoB ). Имелась в виду вот эта упаковка.
    Code:
    <?php
    /*
    =====================================================
    DataLife Engine - by SoftNews Media Group
    -----------------------------------------------------
    http://dle-news.ru/
    -----------------------------------------------------
    Copyright (c) 2004,2016 SoftNews Media Group
    =====================================================
    */
    ?><?php $_F=__FILE__;$_X='Pzc5PzRCNA1zRyoNc0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB
    QUFBQUFBQUFBDXMxdHZNdkxoU2wxPmtwaGtsMS0xS3oxCk9TTVpsclUxSGxpaHYxNj1PUDQNcy0tLS0tLS0tLS0tLS0tLS0tLS0tLS
    0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDXMxQk1NNDpHR2ljbC1rbHJVST1QRw1zLS0tLS0tLS0tLS0tLS0tLS0tLS0t
    LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NczFYTzR6PWhwQk0xKH0pMU53d2EtTndWbjEKT1NNWmxyVTFIbGlodjE2PU
    9QNA1zQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUENczHE4O3t++kx6u7kMefg+ej5
    5e0x4OLy7vDx6ujs6DHv8ODi4OzoDXNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQ
    1zMdTg6es6MWhraWxvSTRCNA1zLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NczHN
    4Oft4Pfl7ejlOjHD6+Di7eD/MfHy8ODt6PbgDXNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU
    FBQUFBQQ1zKkcNcw1zQE9LX1VNdj1NMSgpOw1zQE9LX2hmNGNofWhNX1NjUFVCMSgxdzEpOw1zDXNoUygxIWlsU2hrbGkoMSc+X3Q+
    L3E+WFlKPnQnMSkxKTFqDXMNcwlAbD09Tz1fPWw0Tz1NaGtwMSgxPl9ZTEwxXjE+X2JZcVpXWjYxXjE+X1pESldYPjEpOw1zCUBoa2
    hfVWxNMSgxJ2w9PU89Xz1sNE89TWhrcCcsMT5fWUxMMV4xPl9iWXFaV1o2MV4xPl9aREpXWD4xKTsNcw1zdTFsY1VsMWoNcw1zCUBs
    PT1PPV89bDRPPU1oa3AxKDE+X1lMTDFeMT5fYllxWldaNjFeMT5fdD4vcT5YWUo+dDFeMT5fWkRKV1g+MSk7DXMJQGhraF9VbE0xKD
    EnbD09Tz1fPWw0Tz1NaGtwJywxPl9ZTEwxXjE+X2JZcVpXWjYxXjE+X3Q+L3E+WFlKPnQxXjE+X1pESldYPjEpOw1zDXN1DXMNc0Bo
    a2hfVWxNMSgxJ2loVTRjdnpfbD09Tz1VJywxTT1QbDEpOw1zQGhraF9VbE0xKDEnQk1mY19sPT1PPVUnLDFTdmNVbDEpOw1zDXNpbF
    Noa2wxKDEndFlKWUxXWz4+WjZXWj4nLDFNPVBsMSk7DXNpbFNoa2wxKDEncURESl90V3EnLDFpaD1rdmZsMSgxX19bV0w+X18xKTEp
    Ow1zaWxTaGtsMSgxJz5aNldaPl90V3EnLDFxRERKX3RXcTFJMSdHbGtwaGtsJzEpOw1zDXM9bC5QaD1sX09rfWwxcURESl90V3ExST
    EnR2xrcGhrbEdoa2hNSTRCNCc7DXMNcz83';$_D=strrev('edoced_46esab');eval($_D('JF9YPWJhc2U2NF9kZWNvZGUoJF9Y
    KTskX1g9c3RydHIoJF9YLCd9ZE94dGlBcnU4L2NHNDJOd2pdU002Q1QuRgpZc21bSEVETG8zeWZiPDBCV1puVXFLSlJwPmthaFhsIF
    FnejV7PVZQdjk3ZUkxJywnY2tvekRkPXd9SlBsL3A4MjB7N2Z0R0hZcVFTQQpbRk01T0x4OV1tV1ZCaElONnNSYlQzZ0VuNGlDZVh2
    anlaVXIxdWE8PksuICcpOyRfUj1zdHJfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOy
    RfWD0wOw=='));?>
    
     
  4. ckpunmkug

    ckpunmkug Member

    Joined:
    20 Mar 2017
    Messages:
    72
    Likes Received:
    72
    Reputations:
    10
    seopirat-club
     
    #4 ckpunmkug, 14 May 2017
    Last edited: 14 Aug 2024