3v4l.org

run code in 300+ PHP versions simultaneously
<?php set_time_limit(0); date_default_timezone_set('Asia/Hong_Kong'); libxml_use_internal_errors(true); // $pathLeagueListCache = __DIR__. '/__league_list.txt'; $batchCount = 5; $xpathRegion = '//*[@id="btnGroup_EventSelection"]/ul'; $xpathRegionName = './/li[1]'; $xpathLeagueForRegionView = './/li[position()>1]'; $xpathLeagueIdForRegionView = './/input[@name="SportChk"]'; $xpathLeagueNameForRegionView = './/label'; $xpathLeague = '//div[@data-type="match"]'; $xpathLeagueName = './/h5'; $urlLeague = 'http://bb248.com/sb/Sport.aspx?s=137&lang=en'; $urlMatch = 'http://bb248.com/sb/event.aspx?lang=en'; $xpathMatch = './/div[@data-type="parent"]'; $xpathQueries = array( 'event_type' => './/span[@class="versus"]', 'event_name' => './/li[@data-symbol="eventname"]', 'home_name' => './/tr[@data-symbol="home"]/td[@data-symbol="name"]', 'away_name' => './/tr[@data-symbol="away"]/td[@data-symbol="name"]', 'home_match_odd' => './/tr[@data-symbol="home"]/td[@data-symbol="mb"]/button[@data-symbol="odd"]', 'away_match_odd' => './/tr[@data-symbol="away"]/td[@data-symbol="mb"]/button[@data-symbol="odd"]', 'hc_number' => './/tr[@data-symbol="home"]/td[@data-symbol="hc"]/p[@class="number-odds"]', 'home_hc_odd' => './/tr[@data-symbol="home"]/td[@data-symbol="hc"]/button[@data-symbol="odd"]', 'away_hc_odd' => './/tr[@data-symbol="away"]/td[@data-symbol="hc"]/button[@data-symbol="odd"]', 'total_number' => './/tr[@data-symbol="home"]/td[@data-symbol="ou"]/p[@class="number-overunder"]', 'home_total_odd' => './/tr[@data-symbol="home"]/td[@data-symbol="ou"]/button[@data-symbol="odd"]', 'away_total_odd' => './/tr[@data-symbol="away"]/td[@data-symbol="ou"]/button[@data-symbol="odd"]', 'datetime' => './/span[@data-symbol="datetime"]', ); function stripCountSuffix($name) { return preg_replace('/\\d+$/', '', $name); } $ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_RETURNTRANSFER => true, )); curl_setopt($ch, CURLOPT_URL, $urlLeague); // //load league list $doc = new DOMDocument(); $doc->loadHTML(curl_exec($ch)); $regions = array(); $xpath = new DOMXpath($doc); var_dump($xpath); echo 'xx'; die(); var_dump($xpath->query($xpathRegion)); foreach($xpath->query($xpathRegion) as $region) { var_dump(get_class($region)); var_dump(get_class($xpath->query($xpathRegionName, $region)->item(0))); $regionName = stripCountSuffix($xpath->query($xpathRegionName, $region)->item(0)->nodeValue); echo $regionName; // foreach($xpath->query($xpathLeagueForRegionView, $region) as $league) { // $regions[$regionName][stripCountSuffix($xpath->query($xpathLeagueNameForRegionView, $region)[0]->nodeValue)] // = $xpath->query($xpathLeagueIdForRegionView, $league)[0]->getAttribute('value'); // } } // // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, $urlMatch); // $counter = 0; // $data = []; // while ($slice = array_slice(array_values(call_user_func_array('array_merge', $regions)), $counter * $batchCount, $batchCount)) { // $postData = [ // '__EVENTTARGET' => 'ctl00$ctl00$cphMainBody$cphMain75$imgEvSpHolder', // '__VIEWSTATEGENERATOR' => '9257D4C3', // 'SportChk' => $slice, // 'eventType' => 'handicap', // ]; // curl_setopt($ch, CURLOPT_POST, count($postData)); // //remove [index] suffix in post data field name which is causing problem // curl_setopt($ch, CURLOPT_POSTFIELDS, preg_replace('/%5B\d+%5D/simU', '', http_build_query($postData))); // $doc = new DOMDocument(); // $doc->loadHTML(curl_exec($ch)); // $xpath = new DOMXpath($doc); // foreach($xpath->query($xpathLeague) as $league) { // $leagueName = $xpath->query($xpathLeagueName, $league)[0]->nodeValue; // foreach($xpath->query($xpathMatch, $league) as $match) { // $datum = []; // $id = $match->getAttribute('data-symbol'); // $datum['league'] = $leagueName; // foreach($xpathQueries as $key => $query) { // $nodeList = $xpath->query($query, $match); // $datum[$key] = $nodeList->length > 0? trim($nodeList[0]->nodeValue): null; // } // $datum['has_hc'] = isset($datum['hc_number']); // $datum['has_match'] = isset($datum['home_match_odd']) && isset($datum['away_match_odd']); // $datum['has_total'] = isset($datum['total_number']); // $datum['total_number'] = isset($datum['total_number'])? ltrim($datum['total_number'], 'ou'):null; //total number // //if (array_key_exists('hc_number', $datum)) { // $datum['is_home_handicap'] = $datum['hc_number'] > 0; // $datum['hc_number'] = abs($datum['hc_number']); // //} // if ('at' == $datum['event_type']) { // foreach(['name', 'match_odd', 'hc_odd', 'total_odd'] as $key) { // list($datum['home_'. $key], $datum['away_'. $key]) = [$datum['away_'. $key], $datum['home_'. $key]]; // } // $datum['is_home_handicap'] = !$datum['is_home_handicap']; // } // // normalize odds // foreach($datum as $key => $value) { // if (stripos(strrev($key), strrev('_odd')) === 0 && !is_null($value)) { // $datum[$key] = $datum[$key] * 100 - 100; // } // } // $data[$id] = $datum; // $string = implode('|', [ // $id, // (new \DateTime($datum['datetime']))->format('Y-m-d H:i:s'), // $datum['event_name'], // $datum['home_name'], // null, // $datum['away_name'], // null, // (int)$datum['has_match'], //has match bet // null, //match id // isset($datum['home_match_odd'])? $datum['home_match_odd']: 0, // isset($datum['home_match_odd'])? 100: 1, // isset($datum['away_match_odd'])? $datum['away_match_odd']: 0, // isset($datum['away_match_odd'])? 100: 1, // (int)$datum['has_hc'], //has handicap bet // null, //handicap id // $datum['hc_number'], //handicap number // $datum['is_home_handicap'], //handicap number // isset($datum['home_hc_odd'])? $datum['home_hc_odd']: 0, // isset($datum['home_hc_odd'])? 100: 1, // isset($datum['away_hc_odd'])? $datum['away_hc_odd']: 0, // isset($datum['away_hc_odd'])? 100: 1, // (int)$datum['has_total'], //has handicap bet // null, //total id // $datum['total_number'], //total number // isset($datum['home_total_odd'])? $datum['home_total_odd']: 0, // isset($datum['home_total_odd'])? 100: 1, // isset($datum['away_total_odd'])? $datum['away_total_odd']: 0, // isset($datum['away_total_odd'])? 100: 1, // $datum['league'], // ]); // echo ($string); // echo '</br>'; // } // } // $counter++; // } // curl_close($ch); ?>
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 79) Position 1 = -2
filename:       /in/d8MoL
function name:  (null)
number of ops:  103
compiled vars:  !0 = $batchCount, !1 = $xpathRegion, !2 = $xpathRegionName, !3 = $xpathLeagueForRegionView, !4 = $xpathLeagueIdForRegionView, !5 = $xpathLeagueNameForRegionView, !6 = $xpathLeague, !7 = $xpathLeagueName, !8 = $urlLeague, !9 = $urlMatch, !10 = $xpathMatch, !11 = $xpathQueries, !12 = $ch, !13 = $doc, !14 = $regions, !15 = $xpath, !16 = $region, !17 = $regionName
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    2     0  E >   INIT_FCALL                                               'set_time_limit'
          1        SEND_VAL                                                 0
          2        DO_ICALL                                                 
    4     3        INIT_FCALL                                               'date_default_timezone_set'
          4        SEND_VAL                                                 'Asia%2FHong_Kong'
          5        DO_ICALL                                                 
    5     6        INIT_FCALL                                               'libxml_use_internal_errors'
          7        SEND_VAL                                                 <true>
          8        DO_ICALL                                                 
   10     9        ASSIGN                                                   !0, 5
   12    10        ASSIGN                                                   !1, '%2F%2F%2A%5B%40id%3D%22btnGroup_EventSelection%22%5D%2Ful'
   13    11        ASSIGN                                                   !2, '.%2F%2Fli%5B1%5D'
   14    12        ASSIGN                                                   !3, '.%2F%2Fli%5Bposition%28%29%3E1%5D'
   15    13        ASSIGN                                                   !4, '.%2F%2Finput%5B%40name%3D%22SportChk%22%5D'
   16    14        ASSIGN                                                   !5, '.%2F%2Flabel'
   18    15        ASSIGN                                                   !6, '%2F%2Fdiv%5B%40data-type%3D%22match%22%5D'
   19    16        ASSIGN                                                   !7, '.%2F%2Fh5'
   21    17        ASSIGN                                                   !8, 'http%3A%2F%2Fbb248.com%2Fsb%2FSport.aspx%3Fs%3D137%26lang%3Den'
   22    18        ASSIGN                                                   !9, 'http%3A%2F%2Fbb248.com%2Fsb%2Fevent.aspx%3Flang%3Den'
   24    19        ASSIGN                                                   !10, '.%2F%2Fdiv%5B%40data-type%3D%22parent%22%5D'
   25    20        ASSIGN                                                   !11, <array>
   45    21        INIT_FCALL_BY_NAME                                       'curl_init'
         22        DO_FCALL                                      0  $33     
         23        ASSIGN                                                   !12, $33
   47    24        INIT_FCALL_BY_NAME                                       'curl_setopt_array'
         25        SEND_VAR_EX                                              !12
   48    26        FETCH_CONSTANT                                   ~35     'CURLOPT_RETURNTRANSFER'
         27        INIT_ARRAY                                       ~36     <true>, ~35
         28        SEND_VAL_EX                                              ~36
         29        DO_FCALL                                      0          
   51    30        INIT_FCALL_BY_NAME                                       'curl_setopt'
         31        SEND_VAR_EX                                              !12
         32        FETCH_CONSTANT                                   ~38     'CURLOPT_URL'
         33        SEND_VAL_EX                                              ~38
         34        SEND_VAR_EX                                              !8
         35        DO_FCALL                                      0          
   54    36        NEW                                              $40     'DOMDocument'
         37        DO_FCALL                                      0          
         38        ASSIGN                                                   !13, $40
   55    39        INIT_METHOD_CALL                                         !13, 'loadHTML'
         40        INIT_FCALL_BY_NAME                                       'curl_exec'
         41        SEND_VAR_EX                                              !12
         42        DO_FCALL                                      0  $43     
         43        SEND_VAR_NO_REF_EX                                       $43
         44        DO_FCALL                                      0          
   57    45        ASSIGN                                                   !14, <array>
   58    46        NEW                                              $46     'DOMXpath'
         47        SEND_VAR_EX                                              !13
         48        DO_FCALL                                      0          
         49        ASSIGN                                                   !15, $46
   59    50        INIT_FCALL                                               'var_dump'
         51        SEND_VAR                                                 !15
         52        DO_ICALL                                                 
   60    53        ECHO                                                     'xx'
   61    54      > EXIT                                                     
   62    55*       INIT_FCALL                                               'var_dump'
         56*       INIT_METHOD_CALL                                         !15, 'query'
         57*       SEND_VAR_EX                                              !1
         58*       DO_FCALL                                      0  $50     
         59*       SEND_VAR                                                 $50
         60*       DO_ICALL                                                 
   63    61*       INIT_METHOD_CALL                                         !15, 'query'
         62*       SEND_VAR_EX                                              !1
         63*       DO_FCALL                                      0  $52     
         64*       FE_RESET_R                                       $53     $52, ->95
         65*       FE_FETCH_R                                               $53, !16, ->95
   64    66*       INIT_FCALL                                               'var_dump'
         67*       GET_CLASS                                        ~54     !16
         68*       SEND_VAL                                                 ~54
         69*       DO_ICALL                                                 
   65    70*       INIT_FCALL                                               'var_dump'
         71*       INIT_METHOD_CALL                                         !15, 'query'
         72*       SEND_VAR_EX                                              !2
         73*       SEND_VAR_EX                                              !16
         74*       DO_FCALL                                      0  $56     
         75*       INIT_METHOD_CALL                                         $56, 'item'
         76*       SEND_VAL_EX                                              0
         77*       DO_FCALL                                      0  $57     
         78*       GET_CLASS                                        ~58     $57
         79*       SEND_VAL                                                 ~58
         80*       DO_ICALL                                                 
   66    81*       INIT_FCALL                                               'stripcountsuffix'
         82*       INIT_METHOD_CALL                                         !15, 'query'
         83*       SEND_VAR_EX                                              !2
         84*       SEND_VAR_EX                                              !16
         85*       DO_FCALL                                      0  $60     
         86*       INIT_METHOD_CALL                                         $60, 'item'
         87*       SEND_VAL_EX                                              0
         88*       DO_FCALL                                      0  $61     
         89*       FETCH_OBJ_R                                      ~62     $61, 'nodeValue'
         90*       SEND_VAL                                                 ~62
         91*       DO_FCALL                                      0  $63     
         92*       ASSIGN                                                   !17, $63
   67    93*       ECHO                                                     !17
   63    94*       JMP                                                      ->65
         95*       FE_FREE                                                  $53
   75    96*       INIT_FCALL_BY_NAME                                       'curl_setopt'
         97*       SEND_VAR_EX                                              !12
         98*       FETCH_CONSTANT                                   ~65     'CURLOPT_URL'
         99*       SEND_VAL_EX                                              ~65
        100*       SEND_VAR_EX                                              !9
        101*       DO_FCALL                                      0          
  175   102*     > RETURN                                                   1

Function stripcountsuffix:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/d8MoL
function name:  stripCountSuffix
number of ops:  8
compiled vars:  !0 = $name
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   41     0  E >   RECV                                             !0      
   42     1        INIT_FCALL                                               'preg_replace'
          2        SEND_VAL                                                 '%2F%5Cd%2B%24%2F'
          3        SEND_VAL                                                 ''
          4        SEND_VAR                                                 !0
          5        DO_ICALL                                         $1      
          6      > RETURN                                                   $1
   43     7*     > RETURN                                                   null

End of function stripcountsuffix

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
172.91 ms | 1411 KiB | 24 Q