3v4l.org

run code in 300+ PHP versions simultaneously
<?php // эта функция отправляет команду в сокет, и возвращает ответ от сервера function sWrite( $socket, $data, $echo = true ){ // отображаем отправляемую команду, если это требуется if( $echo ) echo $data; // отправляем команду в сокет fputs( $socket, $data ); // получаем первый байт ответа от сервера $answer = fread( $socket, 1 ); // узнаем информацию о состоянии потока $remains = socket_get_status( $socket ); // и получаем оставшиеся байты ответа от сервера if( $remains --> 0 ) $answer .= fread( $socket, $remains['unread_bytes'] ); // функция возвращает ответ от сервера на переданную команду return $answer; } // адрес электропочты, который надо проверить $email = "twixed@mail.ru"; // получаем данные об MX-записи домена, указанного в email $mx = dns_get_record( end( explode( "@", $email ) ), DNS_MX ); $mx = $mx[0]['target']; // открываем сокет и создаем поток $socket = fsockopen( $mx, 25, $errno, $errstr, 10 ); if( !$socket ){ echo "$errstr ($errno)\n"; }else{ // отправляем пустую строку, чтобы получить приветствие сервера echo sWrite( $socket, "" ); // представляемся сами echo sWrite( $socket, "EHLO example.com\r\n" ); echo sWrite( $socket, "MAIL FROM: dummy@example.com\r\n" ); // запрашиваем разрешение на отправку письма адресату $response = sWrite( $socket, "RCPT TO: $email\r\n" ); echo $response; // закрываем соединение echo sWrite( $socket, "QUIT\r\n" ); fclose( $socket ); // ниже идет простейшая обработка полученного ответа echo "\nCheck report:\n"; if( substr_count( $response, "550" ) > 0 ) echo "Required email address does not exist.\n\n"; else if( substr_count( $response, "250" ) > 0 ) if( substr_count( $response, "OK" ) > 0 ) echo " Required email address exists.\n\n"; else echo " Email address accepted but it looks like the server is working as a relay host.\n\n"; else echo " Required email address existence was not recovered. Last response:\n ---\n$response ---\n\n"; }
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 26, Position 2 = 32
Branch analysis from position: 26
1 jumps found. (Code = 42) Position 1 = 93
Branch analysis from position: 93
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 32
2 jumps found. (Code = 43) Position 1 = 71, Position 2 = 73
Branch analysis from position: 71
1 jumps found. (Code = 42) Position 1 = 93
Branch analysis from position: 93
Branch analysis from position: 73
2 jumps found. (Code = 43) Position 1 = 79, Position 2 = 89
Branch analysis from position: 79
2 jumps found. (Code = 43) Position 1 = 85, Position 2 = 87
Branch analysis from position: 85
1 jumps found. (Code = 42) Position 1 = 88
Branch analysis from position: 88
1 jumps found. (Code = 42) Position 1 = 93
Branch analysis from position: 93
Branch analysis from position: 87
1 jumps found. (Code = 42) Position 1 = 93
Branch analysis from position: 93
Branch analysis from position: 89
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/Ll4ok
function name:  (null)
number of ops:  94
compiled vars:  !0 = $email, !1 = $mx, !2 = $socket, !3 = $errno, !4 = $errstr, !5 = $response
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   21     0  E >   ASSIGN                                                   !0, 'twixed%40mail.ru'
   23     1        INIT_FCALL                                               'dns_get_record'
          2        INIT_FCALL                                               'end'
          3        INIT_FCALL                                               'explode'
          4        SEND_VAL                                                 '%40'
          5        SEND_VAR                                                 !0
          6        DO_ICALL                                         $7      
          7        SEND_VAR_NO_REF                               0          $7
          8        DO_ICALL                                         $8      
          9        SEND_VAR                                                 $8
         10        SEND_VAL                                                 16384
         11        DO_ICALL                                         $9      
         12        ASSIGN                                                   !1, $9
   24    13        FETCH_DIM_R                                      ~11     !1, 0
         14        FETCH_DIM_R                                      ~12     ~11, 'target'
         15        ASSIGN                                                   !1, ~12
   26    16        INIT_FCALL                                               'fsockopen'
         17        SEND_VAR                                                 !1
         18        SEND_VAL                                                 25
         19        SEND_REF                                                 !3
         20        SEND_REF                                                 !4
         21        SEND_VAL                                                 10
         22        DO_ICALL                                         $14     
         23        ASSIGN                                                   !2, $14
   27    24        BOOL_NOT                                         ~16     !2
         25      > JMPZ                                                     ~16, ->32
   28    26    >   ROPE_INIT                                     4  ~18     !4
         27        ROPE_ADD                                      1  ~18     ~18, '+%28'
         28        ROPE_ADD                                      2  ~18     ~18, !3
         29        ROPE_END                                      3  ~17     ~18, '%29%0A'
         30        ECHO                                                     ~17
         31      > JMP                                                      ->93
   31    32    >   INIT_FCALL                                               'swrite'
         33        SEND_VAR                                                 !2
         34        SEND_VAL                                                 ''
         35        DO_FCALL                                      0  $20     
         36        ECHO                                                     $20
   33    37        INIT_FCALL                                               'swrite'
         38        SEND_VAR                                                 !2
         39        SEND_VAL                                                 'EHLO+example.com%0D%0A'
         40        DO_FCALL                                      0  $21     
         41        ECHO                                                     $21
   34    42        INIT_FCALL                                               'swrite'
         43        SEND_VAR                                                 !2
         44        SEND_VAL                                                 'MAIL+FROM%3A+dummy%40example.com%0D%0A'
         45        DO_FCALL                                      0  $22     
         46        ECHO                                                     $22
   36    47        INIT_FCALL                                               'swrite'
         48        SEND_VAR                                                 !2
         49        ROPE_INIT                                     3  ~24     'RCPT+TO%3A+'
         50        ROPE_ADD                                      1  ~24     ~24, !0
         51        ROPE_END                                      2  ~23     ~24, '%0D%0A'
         52        SEND_VAL                                                 ~23
         53        DO_FCALL                                      0  $26     
         54        ASSIGN                                                   !5, $26
   37    55        ECHO                                                     !5
   39    56        INIT_FCALL                                               'swrite'
         57        SEND_VAR                                                 !2
         58        SEND_VAL                                                 'QUIT%0D%0A'
         59        DO_FCALL                                      0  $28     
         60        ECHO                                                     $28
   40    61        INIT_FCALL                                               'fclose'
         62        SEND_VAR                                                 !2
         63        DO_ICALL                                                 
   42    64        ECHO                                                     '%0ACheck+report%3A%0A'
   43    65        INIT_FCALL                                               'substr_count'
         66        SEND_VAR                                                 !5
         67        SEND_VAL                                                 '550'
         68        DO_ICALL                                         $30     
         69        IS_SMALLER                                               0, $30
         70      > JMPZ                                                     ~31, ->73
         71    >   ECHO                                                     'Required+email+address+does+not+exist.%0A%0A'
         72      > JMP                                                      ->93
   44    73    >   INIT_FCALL                                               'substr_count'
         74        SEND_VAR                                                 !5
         75        SEND_VAL                                                 '250'
         76        DO_ICALL                                         $32     
         77        IS_SMALLER                                               0, $32
         78      > JMPZ                                                     ~33, ->89
         79    >   INIT_FCALL                                               'substr_count'
         80        SEND_VAR                                                 !5
         81        SEND_VAL                                                 'OK'
         82        DO_ICALL                                         $34     
         83        IS_SMALLER                                               0, $34
         84      > JMPZ                                                     ~35, ->87
         85    >   ECHO                                                     '++Required+email+address+exists.%0A%0A'
         86      > JMP                                                      ->88
   45    87    >   ECHO                                                     '++Email+address+accepted+but+it+looks+like+the+server+is+working+as+a+relay+host.%0A%0A'
         88    > > JMP                                                      ->93
   46    89    >   ROPE_INIT                                     3  ~37     '++Required+email+address+existence+was+not+recovered.+Last+response%3A%0A++---%0A'
         90        ROPE_ADD                                      1  ~37     ~37, !5
         91        ROPE_END                                      2  ~36     ~37, '++---%0A%0A'
         92        ECHO                                                     ~36
   47    93    > > RETURN                                                   1

Function swrite:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 4, Position 2 = 5
Branch analysis from position: 4
2 jumps found. (Code = 43) Position 1 = 21, Position 2 = 27
Branch analysis from position: 21
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 27
Branch analysis from position: 5
filename:       /in/Ll4ok
function name:  sWrite
number of ops:  29
compiled vars:  !0 = $socket, !1 = $data, !2 = $echo, !3 = $answer, !4 = $remains
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    5     0  E >   RECV                                             !0      
          1        RECV                                             !1      
          2        RECV_INIT                                        !2      <true>
    7     3      > JMPZ                                                     !2, ->5
          4    >   ECHO                                                     !1
    9     5    >   INIT_FCALL                                               'fputs'
          6        SEND_VAR                                                 !0
          7        SEND_VAR                                                 !1
          8        DO_ICALL                                                 
   11     9        INIT_FCALL                                               'fread'
         10        SEND_VAR                                                 !0
         11        SEND_VAL                                                 1
         12        DO_ICALL                                         $6      
         13        ASSIGN                                                   !3, $6
   13    14        INIT_FCALL                                               'socket_get_status'
         15        SEND_VAR                                                 !0
         16        DO_ICALL                                         $8      
         17        ASSIGN                                                   !4, $8
   15    18        POST_DEC                                         ~10     !4
         19        IS_SMALLER                                               0, ~10
         20      > JMPZ                                                     ~11, ->27
         21    >   INIT_FCALL                                               'fread'
         22        SEND_VAR                                                 !0
         23        FETCH_DIM_R                                      ~12     !4, 'unread_bytes'
         24        SEND_VAL                                                 ~12
         25        DO_ICALL                                         $13     
         26        ASSIGN_OP                                     8          !3, $13
   17    27    > > RETURN                                                   !3
   18    28*     > RETURN                                                   null

End of function swrite

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
162.15 ms | 1411 KiB | 36 Q