3v4l.org

run code in 300+ PHP versions simultaneously
<?php function abc($file) { $perms = fileperms($file); if (($perms & 0xC000) == 0xC000) { // Socket $info = 's'; } elseif (($perms & 0xA000) == 0xA000) { // Symbolic Link $info = 'l'; } elseif (($perms & 0x8000) == 0x8000) { // Regular $info = '-'; } elseif (($perms & 0x6000) == 0x6000) { // Block special $info = 'b'; } elseif (($perms & 0x4000) == 0x4000) { // Directory $info = 'd'; } elseif (($perms & 0x2000) == 0x2000) { // Character special $info = 'c'; } elseif (($perms & 0x1000) == 0x1000) { // FIFO pipe $info = 'p'; } else { // Unknown $info = 'u'; } // Owner $info .= (($perms & 0x0100) ? 'r' : '-'); $info .= (($perms & 0x0080) ? 'w' : '-'); $info .= (($perms & 0x0040) ? (($perms & 0x0800) ? 's' : 'x' ) : (($perms & 0x0800) ? 'S' : '-')); // Group $info .= (($perms & 0x0020) ? 'r' : '-'); $info .= (($perms & 0x0010) ? 'w' : '-'); $info .= (($perms & 0x0008) ? (($perms & 0x0400) ? 's' : 'x' ) : (($perms & 0x0400) ? 'S' : '-')); // World $info .= (($perms & 0x0004) ? 'r' : '-'); $info .= (($perms & 0x0002) ? 'w' : '-'); $info .= (($perms & 0x0001) ? (($perms & 0x0200) ? 't' : 'x' ) : (($perms & 0x0200) ? 'T' : '-')); return fileowner($file).' '.filegroup($file).' '.$info; } echo posix_getpwuid(posix_geteuid())['name'].PHP_EOL.PHP_EOL; foreach(scandir('.') as $dir) { //echo $dir.': '.substr(sprintf('%o', fileperms($dir)), -4).PHP_EOL; echo $dir.' '.abc('./'.$dir); }
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 13, Position 2 = 22
Branch analysis from position: 13
2 jumps found. (Code = 78) Position 1 = 14, Position 2 = 22
Branch analysis from position: 14
1 jumps found. (Code = 42) Position 1 = 13
Branch analysis from position: 13
Branch analysis from position: 22
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 22
filename:       /in/5BlHR
function name:  (null)
number of ops:  24
compiled vars:  !0 = $dir
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   55     0  E >   INIT_FCALL                                               'posix_getpwuid'
          1        INIT_FCALL                                               'posix_geteuid'
          2        DO_ICALL                                         $1      
          3        SEND_VAR                                                 $1
          4        DO_ICALL                                         $2      
          5        FETCH_DIM_R                                      ~3      $2, 'name'
          6        CONCAT                                           ~4      ~3, '%0A'
          7        CONCAT                                           ~5      ~4, '%0A'
          8        ECHO                                                     ~5
   56     9        INIT_FCALL                                               'scandir'
         10        SEND_VAL                                                 '.'
         11        DO_ICALL                                         $6      
         12      > FE_RESET_R                                       $7      $6, ->22
         13    > > FE_FETCH_R                                               $7, !0, ->22
   59    14    >   CONCAT                                           ~8      !0, '+'
         15        INIT_FCALL                                               'abc'
         16        CONCAT                                           ~9      '.%2F', !0
         17        SEND_VAL                                                 ~9
         18        DO_FCALL                                      0  $10     
         19        CONCAT                                           ~11     ~8, $10
         20        ECHO                                                     ~11
   56    21      > JMP                                                      ->13
         22    >   FE_FREE                                                  $7
   60    23      > RETURN                                                   1

Function abc:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 8, Position 2 = 10
Branch analysis from position: 8
1 jumps found. (Code = 42) Position 1 = 41
Branch analysis from position: 41
2 jumps found. (Code = 43) Position 1 = 43, Position 2 = 45
Branch analysis from position: 43
1 jumps found. (Code = 42) Position 1 = 46
Branch analysis from position: 46
2 jumps found. (Code = 43) Position 1 = 49, Position 2 = 51
Branch analysis from position: 49
1 jumps found. (Code = 42) Position 1 = 52
Branch analysis from position: 52
2 jumps found. (Code = 43) Position 1 = 55, Position 2 = 62
Branch analysis from position: 55
2 jumps found. (Code = 43) Position 1 = 57, Position 2 = 59
Branch analysis from position: 57
1 jumps found. (Code = 42) Position 1 = 60
Branch analysis from position: 60
1 jumps found. (Code = 42) Position 1 = 68
Branch analysis from position: 68
2 jumps found. (Code = 43) Position 1 = 71, Position 2 = 73
Branch analysis from position: 71
1 jumps found. (Code = 42) Position 1 = 74
Branch analysis from position: 74
2 jumps found. (Code = 43) Position 1 = 77, Position 2 = 79
Branch analysis from position: 77
1 jumps found. (Code = 42) Position 1 = 80
Branch analysis from position: 80
2 jumps found. (Code = 43) Position 1 = 83, Position 2 = 90
Branch analysis from position: 83
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 = 96
Branch analysis from position: 96
2 jumps found. (Code = 43) Position 1 = 99, Position 2 = 101
Branch analysis from position: 99
1 jumps found. (Code = 42) Position 1 = 102
Branch analysis from position: 102
2 jumps found. (Code = 43) Position 1 = 105, Position 2 = 107
Branch analysis from position: 105
1 jumps found. (Code = 42) Position 1 = 108
Branch analysis from position: 108
2 jumps found. (Code = 43) Position 1 = 111, Position 2 = 118
Branch analysis from position: 111
2 jumps found. (Code = 43) Position 1 = 113, Position 2 = 115
Branch analysis from position: 113
1 jumps found. (Code = 42) Position 1 = 116
Branch analysis from position: 116
1 jumps found. (Code = 42) Position 1 = 124
Branch analysis from position: 124
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 115
1 jumps found. (Code = 42) Position 1 = 124
Branch analysis from position: 124
Branch analysis from position: 118
2 jumps found. (Code = 43) Position 1 = 120, Position 2 = 122
Branch analysis from position: 120
1 jumps found. (Code = 42) Position 1 = 123
Branch analysis from position: 123
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 122
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 107
2 jumps found. (Code = 43) Position 1 = 111, Position 2 = 118
Branch analysis from position: 111
Branch analysis from position: 118
Branch analysis from position: 101
2 jumps found. (Code = 43) Position 1 = 105, Position 2 = 107
Branch analysis from position: 105
Branch analysis from position: 107
Branch analysis from position: 87
1 jumps found. (Code = 42) Position 1 = 96
Branch analysis from position: 96
Branch analysis from position: 90
2 jumps found. (Code = 43) Position 1 = 92, Position 2 = 94
Branch analysis from position: 92
1 jumps found. (Code = 42) Position 1 = 95
Branch analysis from position: 95
2 jumps found. (Code = 43) Position 1 = 99, Position 2 = 101
Branch analysis from position: 99
Branch analysis from position: 101
Branch analysis from position: 94
2 jumps found. (Code = 43) Position 1 = 99, Position 2 = 101
Branch analysis from position: 99
Branch analysis from position: 101
Branch analysis from position: 79
2 jumps found. (Code = 43) Position 1 = 83, Position 2 = 90
Branch analysis from position: 83
Branch analysis from position: 90
Branch analysis from position: 73
2 jumps found. (Code = 43) Position 1 = 77, Position 2 = 79
Branch analysis from position: 77
Branch analysis from position: 79
Branch analysis from position: 59
1 jumps found. (Code = 42) Position 1 = 68
Branch analysis from position: 68
Branch analysis from position: 62
2 jumps found. (Code = 43) Position 1 = 64, Position 2 = 66
Branch analysis from position: 64
1 jumps found. (Code = 42) Position 1 = 67
Branch analysis from position: 67
2 jumps found. (Code = 43) Position 1 = 71, Position 2 = 73
Branch analysis from position: 71
Branch analysis from position: 73
Branch analysis from position: 66
2 jumps found. (Code = 43) Position 1 = 71, Position 2 = 73
Branch analysis from position: 71
Branch analysis from position: 73
Branch analysis from position: 51
2 jumps found. (Code = 43) Position 1 = 55, Position 2 = 62
Branch analysis from position: 55
Branch analysis from position: 62
Branch analysis from position: 45
2 jumps found. (Code = 43) Position 1 = 49, Position 2 = 51
Branch analysis from position: 49
Branch analysis from position: 51
Branch analysis from position: 10
2 jumps found. (Code = 43) Position 1 = 13, Position 2 = 15
Branch analysis from position: 13
1 jumps found. (Code = 42) Position 1 = 41
Branch analysis from position: 41
Branch analysis from position: 15
2 jumps found. (Code = 43) Position 1 = 18, Position 2 = 20
Branch analysis from position: 18
1 jumps found. (Code = 42) Position 1 = 41
Branch analysis from position: 41
Branch analysis from position: 20
2 jumps found. (Code = 43) Position 1 = 23, Position 2 = 25
Branch analysis from position: 23
1 jumps found. (Code = 42) Position 1 = 41
Branch analysis from position: 41
Branch analysis from position: 25
2 jumps found. (Code = 43) Position 1 = 28, Position 2 = 30
Branch analysis from position: 28
1 jumps found. (Code = 42) Position 1 = 41
Branch analysis from position: 41
Branch analysis from position: 30
2 jumps found. (Code = 43) Position 1 = 33, Position 2 = 35
Branch analysis from position: 33
1 jumps found. (Code = 42) Position 1 = 41
Branch analysis from position: 41
Branch analysis from position: 35
2 jumps found. (Code = 43) Position 1 = 38, Position 2 = 40
Branch analysis from position: 38
1 jumps found. (Code = 42) Position 1 = 41
Branch analysis from position: 41
Branch analysis from position: 40
2 jumps found. (Code = 43) Position 1 = 43, Position 2 = 45
Branch analysis from position: 43
Branch analysis from position: 45
filename:       /in/5BlHR
function name:  abc
number of ops:  137
compiled vars:  !0 = $file, !1 = $perms, !2 = $info
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   RECV                                             !0      
    5     1        INIT_FCALL                                               'fileperms'
          2        SEND_VAR                                                 !0
          3        DO_ICALL                                         $3      
          4        ASSIGN                                                   !1, $3
    7     5        BW_AND                                           ~5      !1, 49152
          6        IS_EQUAL                                                 ~5, 49152
          7      > JMPZ                                                     ~6, ->10
    9     8    >   ASSIGN                                                   !2, 's'
          9      > JMP                                                      ->41
   10    10    >   BW_AND                                           ~8      !1, 40960
         11        IS_EQUAL                                                 ~8, 40960
         12      > JMPZ                                                     ~9, ->15
   12    13    >   ASSIGN                                                   !2, 'l'
         14      > JMP                                                      ->41
   13    15    >   BW_AND                                           ~11     !1, 32768
         16        IS_EQUAL                                                 ~11, 32768
         17      > JMPZ                                                     ~12, ->20
   15    18    >   ASSIGN                                                   !2, '-'
         19      > JMP                                                      ->41
   16    20    >   BW_AND                                           ~14     !1, 24576
         21        IS_EQUAL                                                 ~14, 24576
         22      > JMPZ                                                     ~15, ->25
   18    23    >   ASSIGN                                                   !2, 'b'
         24      > JMP                                                      ->41
   19    25    >   BW_AND                                           ~17     !1, 16384
         26        IS_EQUAL                                                 ~17, 16384
         27      > JMPZ                                                     ~18, ->30
   21    28    >   ASSIGN                                                   !2, 'd'
         29      > JMP                                                      ->41
   22    30    >   BW_AND                                           ~20     !1, 8192
         31        IS_EQUAL                                                 ~20, 8192
         32      > JMPZ                                                     ~21, ->35
   24    33    >   ASSIGN                                                   !2, 'c'
         34      > JMP                                                      ->41
   25    35    >   BW_AND                                           ~23     !1, 4096
         36        IS_EQUAL                                                 ~23, 4096
         37      > JMPZ                                                     ~24, ->40
   27    38    >   ASSIGN                                                   !2, 'p'
         39      > JMP                                                      ->41
   30    40    >   ASSIGN                                                   !2, 'u'
   34    41    >   BW_AND                                           ~27     !1, 256
         42      > JMPZ                                                     ~27, ->45
         43    >   QM_ASSIGN                                        ~28     'r'
         44      > JMP                                                      ->46
         45    >   QM_ASSIGN                                        ~28     '-'
         46    >   ASSIGN_OP                                     8          !2, ~28
   35    47        BW_AND                                           ~30     !1, 128
         48      > JMPZ                                                     ~30, ->51
         49    >   QM_ASSIGN                                        ~31     'w'
         50      > JMP                                                      ->52
         51    >   QM_ASSIGN                                        ~31     '-'
         52    >   ASSIGN_OP                                     8          !2, ~31
   36    53        BW_AND                                           ~33     !1, 64
         54      > JMPZ                                                     ~33, ->62
   37    55    >   BW_AND                                           ~34     !1, 2048
         56      > JMPZ                                                     ~34, ->59
         57    >   QM_ASSIGN                                        ~35     's'
         58      > JMP                                                      ->60
         59    >   QM_ASSIGN                                        ~35     'x'
         60    >   QM_ASSIGN                                        ~36     ~35
         61      > JMP                                                      ->68
   38    62    >   BW_AND                                           ~37     !1, 2048
         63      > JMPZ                                                     ~37, ->66
         64    >   QM_ASSIGN                                        ~38     'S'
         65      > JMP                                                      ->67
         66    >   QM_ASSIGN                                        ~38     '-'
         67    >   QM_ASSIGN                                        ~36     ~38
         68    >   ASSIGN_OP                                     8          !2, ~36
   41    69        BW_AND                                           ~40     !1, 32
         70      > JMPZ                                                     ~40, ->73
         71    >   QM_ASSIGN                                        ~41     'r'
         72      > JMP                                                      ->74
         73    >   QM_ASSIGN                                        ~41     '-'
         74    >   ASSIGN_OP                                     8          !2, ~41
   42    75        BW_AND                                           ~43     !1, 16
         76      > JMPZ                                                     ~43, ->79
         77    >   QM_ASSIGN                                        ~44     'w'
         78      > JMP                                                      ->80
         79    >   QM_ASSIGN                                        ~44     '-'
         80    >   ASSIGN_OP                                     8          !2, ~44
   43    81        BW_AND                                           ~46     !1, 8
         82      > JMPZ                                                     ~46, ->90
   44    83    >   BW_AND                                           ~47     !1, 1024
         84      > JMPZ                                                     ~47, ->87
         85    >   QM_ASSIGN                                        ~48     's'
         86      > JMP                                                      ->88
         87    >   QM_ASSIGN                                        ~48     'x'
         88    >   QM_ASSIGN                                        ~49     ~48
         89      > JMP                                                      ->96
   45    90    >   BW_AND                                           ~50     !1, 1024
         91      > JMPZ                                                     ~50, ->94
         92    >   QM_ASSIGN                                        ~51     'S'
         93      > JMP                                                      ->95
         94    >   QM_ASSIGN                                        ~51     '-'
         95    >   QM_ASSIGN                                        ~49     ~51
         96    >   ASSIGN_OP                                     8          !2, ~49
   48    97        BW_AND                                           ~53     !1, 4
         98      > JMPZ                                                     ~53, ->101
         99    >   QM_ASSIGN                                        ~54     'r'
        100      > JMP                                                      ->102
        101    >   QM_ASSIGN                                        ~54     '-'
        102    >   ASSIGN_OP                                     8          !2, ~54
   49   103        BW_AND                                           ~56     !1, 2
        104      > JMPZ                                                     ~56, ->107
        105    >   QM_ASSIGN                                        ~57     'w'
        106      > JMP                                                      ->108
        107    >   QM_ASSIGN                                        ~57     '-'
        108    >   ASSIGN_OP                                     8          !2, ~57
   50   109        BW_AND                                           ~59     !1, 1
        110      > JMPZ                                                     ~59, ->118
   51   111    >   BW_AND                                           ~60     !1, 512
        112      > JMPZ                                                     ~60, ->115
        113    >   QM_ASSIGN                                        ~61     't'
        114      > JMP                                                      ->116
        115    >   QM_ASSIGN                                        ~61     'x'
        116    >   QM_ASSIGN                                        ~62     ~61
        117      > JMP                                                      ->124
   52   118    >   BW_AND                                           ~63     !1, 512
        119      > JMPZ                                                     ~63, ->122
        120    >   QM_ASSIGN                                        ~64     'T'
        121      > JMP                                                      ->123
        122    >   QM_ASSIGN                                        ~64     '-'
        123    >   QM_ASSIGN                                        ~62     ~64
        124    >   ASSIGN_OP                                     8          !2, ~62
   53   125        INIT_FCALL                                               'fileowner'
        126        SEND_VAR                                                 !0
        127        DO_ICALL                                         $66     
        128        CONCAT                                           ~67     $66, '+'
        129        INIT_FCALL                                               'filegroup'
        130        SEND_VAR                                                 !0
        131        DO_ICALL                                         $68     
        132        CONCAT                                           ~69     ~67, $68
        133        CONCAT                                           ~70     ~69, '+'
        134        CONCAT                                           ~71     ~70, !2
        135      > RETURN                                                   ~71
   54   136*     > RETURN                                                   null

End of function abc

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
160.77 ms | 1419 KiB | 26 Q