3v4l.org

run code in 300+ PHP versions simultaneously
<?php function prepareClientFilename($filename = '', $extension = '', $maxLength = 255) { $filename = strlen($filename) ? $filename : uniqid('fid_', true); $extension = rtrim(".{$extension}" , '.'); return substr($filename, 0, $maxLength - strlen($extension)) . $extension; } $tests = [ prepareClientFilename('this_is_a_string', 'txt'), prepareClientFilename(str_repeat(implode(range('a','z')), 9), 'pdf'), prepareClientFilename(str_repeat(implode(range('a','z')), 10), ''), prepareClientFilename(str_repeat(implode(range('a','z')), 10), 'csv'), prepareClientFilename('', 'jpeg', 10), prepareClientFilename('', 'mp4'), prepareClientFilename(), ]; var_export(array_combine($tests, array_map('strlen', $tests)));
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/F5p5b
function name:  (null)
number of ops:  80
compiled vars:  !0 = $tests
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   10     0  E >   INIT_FCALL                                               'prepareclientfilename'
          1        SEND_VAL                                                 'this_is_a_string'
          2        SEND_VAL                                                 'txt'
          3        DO_FCALL                                      0  $1      
          4        INIT_ARRAY                                       ~2      $1
   11     5        INIT_FCALL                                               'prepareclientfilename'
          6        INIT_FCALL                                               'str_repeat'
          7        INIT_FCALL                                               'implode'
          8        INIT_FCALL                                               'range'
          9        SEND_VAL                                                 'a'
         10        SEND_VAL                                                 'z'
         11        DO_ICALL                                         $3      
         12        SEND_VAR                                                 $3
         13        DO_ICALL                                         $4      
         14        SEND_VAR                                                 $4
         15        SEND_VAL                                                 9
         16        DO_ICALL                                         $5      
         17        SEND_VAR                                                 $5
         18        SEND_VAL                                                 'pdf'
         19        DO_FCALL                                      0  $6      
         20        ADD_ARRAY_ELEMENT                                ~2      $6
   12    21        INIT_FCALL                                               'prepareclientfilename'
         22        INIT_FCALL                                               'str_repeat'
         23        INIT_FCALL                                               'implode'
         24        INIT_FCALL                                               'range'
         25        SEND_VAL                                                 'a'
         26        SEND_VAL                                                 'z'
         27        DO_ICALL                                         $7      
         28        SEND_VAR                                                 $7
         29        DO_ICALL                                         $8      
         30        SEND_VAR                                                 $8
         31        SEND_VAL                                                 10
         32        DO_ICALL                                         $9      
         33        SEND_VAR                                                 $9
         34        SEND_VAL                                                 ''
         35        DO_FCALL                                      0  $10     
         36        ADD_ARRAY_ELEMENT                                ~2      $10
   13    37        INIT_FCALL                                               'prepareclientfilename'
         38        INIT_FCALL                                               'str_repeat'
         39        INIT_FCALL                                               'implode'
         40        INIT_FCALL                                               'range'
         41        SEND_VAL                                                 'a'
         42        SEND_VAL                                                 'z'
         43        DO_ICALL                                         $11     
         44        SEND_VAR                                                 $11
         45        DO_ICALL                                         $12     
         46        SEND_VAR                                                 $12
         47        SEND_VAL                                                 10
         48        DO_ICALL                                         $13     
         49        SEND_VAR                                                 $13
         50        SEND_VAL                                                 'csv'
         51        DO_FCALL                                      0  $14     
         52        ADD_ARRAY_ELEMENT                                ~2      $14
   14    53        INIT_FCALL                                               'prepareclientfilename'
         54        SEND_VAL                                                 ''
         55        SEND_VAL                                                 'jpeg'
         56        SEND_VAL                                                 10
         57        DO_FCALL                                      0  $15     
         58        ADD_ARRAY_ELEMENT                                ~2      $15
   15    59        INIT_FCALL                                               'prepareclientfilename'
         60        SEND_VAL                                                 ''
         61        SEND_VAL                                                 'mp4'
         62        DO_FCALL                                      0  $16     
         63        ADD_ARRAY_ELEMENT                                ~2      $16
   16    64        INIT_FCALL                                               'prepareclientfilename'
         65        DO_FCALL                                      0  $17     
         66        ADD_ARRAY_ELEMENT                                ~2      $17
    9    67        ASSIGN                                                   !0, ~2
   19    68        INIT_FCALL                                               'var_export'
         69        INIT_FCALL                                               'array_combine'
         70        SEND_VAR                                                 !0
         71        INIT_FCALL                                               'array_map'
         72        SEND_VAL                                                 'strlen'
         73        SEND_VAR                                                 !0
         74        DO_ICALL                                         $19     
         75        SEND_VAR                                                 $19
         76        DO_ICALL                                         $20     
         77        SEND_VAR                                                 $20
         78        DO_ICALL                                                 
         79      > RETURN                                                   1

Function prepareclientfilename:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 5, Position 2 = 7
Branch analysis from position: 5
1 jumps found. (Code = 42) Position 1 = 12
Branch analysis from position: 12
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 7
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/F5p5b
function name:  prepareClientFilename
number of ops:  30
compiled vars:  !0 = $filename, !1 = $extension, !2 = $maxLength
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   RECV_INIT                                        !0      ''
          1        RECV_INIT                                        !1      ''
          2        RECV_INIT                                        !2      255
    4     3        STRLEN                                           ~3      !0
          4      > JMPZ                                                     ~3, ->7
          5    >   QM_ASSIGN                                        ~4      !0
          6      > JMP                                                      ->12
          7    >   INIT_FCALL                                               'uniqid'
          8        SEND_VAL                                                 'fid_'
          9        SEND_VAL                                                 <true>
         10        DO_ICALL                                         $5      
         11        QM_ASSIGN                                        ~4      $5
         12    >   ASSIGN                                                   !0, ~4
    5    13        INIT_FCALL                                               'rtrim'
         14        NOP                                                      
         15        FAST_CONCAT                                      ~7      '.', !1
         16        SEND_VAL                                                 ~7
         17        SEND_VAL                                                 '.'
         18        DO_ICALL                                         $8      
         19        ASSIGN                                                   !1, $8
    6    20        INIT_FCALL                                               'substr'
         21        SEND_VAR                                                 !0
         22        SEND_VAL                                                 0
         23        STRLEN                                           ~10     !1
         24        SUB                                              ~11     !2, ~10
         25        SEND_VAL                                                 ~11
         26        DO_ICALL                                         $12     
         27        CONCAT                                           ~13     $12, !1
         28      > RETURN                                                   ~13
    7    29*     > RETURN                                                   null

End of function prepareclientfilename

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
147.2 ms | 1020 KiB | 29 Q