3v4l.org

run code in 500+ PHP versions simultaneously
<?php /* * You can open a sample spreadsheet at https://goo.gl/j50MKc * You can download a sample CSV at https://goo.gl/H4ni63 */ $payload = '"Hello\", World!'; $rfcCsv = '"""Hello\"", World!"'; //Contents of https://goo.gl/H4ni63 $actualRfc = str_getcsv($rfcCsv, ',', '"', '"'); echo "READING RFC CSV\n"; echo "---------------\n"; echo "To read a well formatted CSV, you must use the `double-quote` char as enclosure and\n"; echo " as escape\n"; echo sprintf("Expected: %s\n", $payload); echo sprintf("Actual : %s\n", $actualRfc[0]); echo "Equals? "; var_dump($payload === $actualRfc[0]); echo "\n\n================================================================================\n\n"; $handler = fopen('php://temp', 'w+'); echo "WRITING\n"; echo "-------\n"; if (PHP_VERSION_ID < 50504 || (defined('HHVM_VERSION_ID') && HHVM_VERSION_ID < 31100)) { // There is NO support for escape param fputcsv($handler, array($payload), ',', '"'); } else { // There is support for escape param fputcsv($handler, array($payload), ',', '"', '"'); } rewind($handler); $actual = rtrim(fgets($handler, 4096), "\n"); echo "There is no way to write a well formatted CSV even. The support for the escape param\n"; echo " in the fputcsv function do not fix the invalid format.\n"; echo sprintf("Expected: %s\n", $rfcCsv); echo sprintf("Actual : %s\n", $actual); echo "Equals? "; var_dump($rfcCsv === $actual); echo "\n\n================================================================================\n\n"; $actualPhp = str_getcsv($actual, ',', '"', '"'); echo "READING PHP CSV\n"; echo "---------------\n"; echo "If you read a PHP formatted CSV using use the `double-quote` char as enclosure and\n"; echo " as escape, the result is not the expected one.\n"; echo sprintf("Expected: %s\n", $payload); echo sprintf("Actual : %s\n", $actualPhp[0]); echo "Equals? "; var_dump($payload === $actualPhp[0]); echo "\n\n================================================================================\n\n";
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 46) Position 1 = 38, Position 2 = 41
Branch analysis from position: 38
2 jumps found. (Code = 43) Position 1 = 43, Position 2 = 51
Branch analysis from position: 43
1 jumps found. (Code = 42) Position 1 = 59
Branch analysis from position: 59
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 51
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 41
filename:       /in/NnHp4
function name:  (null)
number of ops:  115
compiled vars:  !0 = $payload, !1 = $rfcCsv, !2 = $actualRfc, !3 = $handler, !4 = $actual, !5 = $actualPhp
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
    7     0  E >   ASSIGN                                                       !0, '%22Hello%5C%22%2C+World%21'
    8     1        ASSIGN                                                       !1, '%22%22%22Hello%5C%22%22%2C+World%21%22'
   10     2        INIT_FCALL                                                   'str_getcsv'
          3        SEND_VAR                                                     !1
          4        SEND_VAL                                                     '%2C'
          5        SEND_VAL                                                     '%22'
          6        SEND_VAL                                                     '%22'
          7        DO_ICALL                                             $8      
          8        ASSIGN                                                       !2, $8
   11     9        ECHO                                                         'READING+RFC+CSV%0A'
   12    10        ECHO                                                         '---------------%0A'
   13    11        ECHO                                                         'To+read+a+well+formatted+CSV%2C+you+must+use+the+%60double-quote%60+char+as+enclosure+and%0A'
   14    12        ECHO                                                         '+as+escape%0A'
   15    13        ROPE_INIT                                         3  ~11     'Expected%3A+'
         14        ROPE_ADD                                          1  ~11     ~11, !0
         15        ROPE_END                                          2  ~10     ~11, '%0A'
         16        ECHO                                                         ~10
   16    17        FETCH_DIM_R                                          ~13     !2, 0
         18        ROPE_INIT                                         3  ~15     'Actual++%3A+'
         19        ROPE_ADD                                          1  ~15     ~15, ~13
         20        ROPE_END                                          2  ~14     ~15, '%0A'
         21        ECHO                                                         ~14
   17    22        ECHO                                                         'Equals%3F+'
         23        INIT_FCALL                                                   'var_dump'
         24        FETCH_DIM_R                                          ~17     !2, 0
         25        IS_IDENTICAL                                         ~18     !0, ~17
         26        SEND_VAL                                                     ~18
         27        DO_ICALL                                                     
   18    28        ECHO                                                         '%0A%0A%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0A'
   20    29        INIT_FCALL                                                   'fopen'
         30        SEND_VAL                                                     'php%3A%2F%2Ftemp'
         31        SEND_VAL                                                     'w%2B'
         32        DO_ICALL                                             $20     
         33        ASSIGN                                                       !3, $20
   21    34        ECHO                                                         'WRITING%0A'
   22    35        ECHO                                                         '-------%0A'
   23    36        DEFINED                                              ~22     'HHVM_VERSION_ID'
         37      > JMPZ_EX                                              ~22     ~22, ->41
         38    >   FETCH_CONSTANT                                       ~23     'HHVM_VERSION_ID'
         39        IS_SMALLER                                           ~24     ~23, 31100
         40        BOOL                                                 ~22     ~24
         41    >   BOOL                                                 ~25     ~22
         42      > JMPZ                                                         ~25, ->51
   25    43    >   INIT_FCALL                                                   'fputcsv'
         44        SEND_VAR                                                     !3
         45        INIT_ARRAY                                           ~26     !0
         46        SEND_VAL                                                     ~26
         47        SEND_VAL                                                     '%2C'
         48        SEND_VAL                                                     '%22'
         49        DO_ICALL                                                     
   23    50      > JMP                                                          ->59
   28    51    >   INIT_FCALL                                                   'fputcsv'
         52        SEND_VAR                                                     !3
         53        INIT_ARRAY                                           ~28     !0
         54        SEND_VAL                                                     ~28
         55        SEND_VAL                                                     '%2C'
         56        SEND_VAL                                                     '%22'
         57        SEND_VAL                                                     '%22'
         58        DO_ICALL                                                     
   30    59    >   INIT_FCALL                                                   'rewind'
         60        SEND_VAR                                                     !3
         61        DO_ICALL                                                     
   31    62        INIT_FCALL                                                   'rtrim'
         63        INIT_FCALL                                                   'fgets'
         64        SEND_VAR                                                     !3
         65        SEND_VAL                                                     4096
         66        DO_ICALL                                             $31     
         67        SEND_VAR                                                     $31
         68        SEND_VAL                                                     '%0A'
         69        DO_ICALL                                             $32     
         70        ASSIGN                                                       !4, $32
   33    71        ECHO                                                         'There+is+no+way+to+write+a+well+formatted+CSV+even.+The+support+for+the+escape+param%0A'
   34    72        ECHO                                                         '+in+the+fputcsv+function+do+not+fix+the+invalid+format.%0A'
   35    73        ROPE_INIT                                         3  ~35     'Expected%3A+'
         74        ROPE_ADD                                          1  ~35     ~35, !1
         75        ROPE_END                                          2  ~34     ~35, '%0A'
         76        ECHO                                                         ~34
   36    77        ROPE_INIT                                         3  ~38     'Actual++%3A+'
         78        ROPE_ADD                                          1  ~38     ~38, !4
         79        ROPE_END                                          2  ~37     ~38, '%0A'
         80        ECHO                                                         ~37
   37    81        ECHO                                                         'Equals%3F+'
         82        INIT_FCALL                                                   'var_dump'
         83        IS_IDENTICAL                                         ~40     !1, !4
         84        SEND_VAL                                                     ~40
         85        DO_ICALL                                                     
   38    86        ECHO                                                         '%0A%0A%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0A'
   40    87        INIT_FCALL                                                   'str_getcsv'
         88        SEND_VAR                                                     !4
         89        SEND_VAL                                                     '%2C'
         90        SEND_VAL                                                     '%22'
         91        SEND_VAL                                                     '%22'
         92        DO_ICALL                                             $42     
         93        ASSIGN                                                       !5, $42
   41    94        ECHO                                                         'READING+PHP+CSV%0A'
   42    95        ECHO                                                         '---------------%0A'
   43    96        ECHO                                                         'If+you+read+a+PHP+formatted+CSV+using+use+the+%60double-quote%60+char+as+enclosure+and%0A'
   44    97        ECHO                                                         '+as+escape%2C+the+result+is+not+the+expected+one.%0A'
   45    98        ROPE_INIT                                         3  ~45     'Expected%3A+'
         99        ROPE_ADD                                          1  ~45     ~45, !0
        100        ROPE_END                                          2  ~44     ~45, '%0A'
        101        ECHO                                                         ~44
   46   102        FETCH_DIM_R                                          ~47     !5, 0
        103        ROPE_INIT                                         3  ~49     'Actual++%3A+'
        104        ROPE_ADD                                          1  ~49     ~49, ~47
        105        ROPE_END                                          2  ~48     ~49, '%0A'
        106        ECHO                                                         ~48
   47   107        ECHO                                                         'Equals%3F+'
        108        INIT_FCALL                                                   'var_dump'
        109        FETCH_DIM_R                                          ~51     !5, 0
        110        IS_IDENTICAL                                         ~52     !0, ~51
        111        SEND_VAL                                                     ~52
        112        DO_ICALL                                                     
   48   113        ECHO                                                         '%0A%0A%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0A'
        114      > RETURN                                                       1

Generated using Vulcan Logic Dumper, using php 8.5.0


preferences:
166.37 ms | 3095 KiB | 20 Q