3v4l.org

run code in 300+ PHP versions simultaneously
<?php ############################################ # # # ## ## ###### ##### #### ## ## # # #### ## ## ## ## ## ### ## # # ## #### ##### ## ## ## ### # # #### ## ## ## ## ## ## ## # # ## ## ##### ## ## #### ## ## # # # ############################################ # http://vk.com/id18471769 # ############################################ # Версия от 22.07.2013 # ############################################ class QIWI_LazyPay { public $iQiwiAccount, $aBalances = array( 'USD' => 0, 'RUB' => 0, 'EUR' => 0, 'KZT' => 0 ); private $sCookies = null; public function __construct( $iQiwiAccount, $sPassword, $sCookies = null ) { # Инициализация COOKIE'S : $this->sCookies = $sCookies; # Если COOKIE'S заполнены : if( !is_null( $sCookies ) ) { # Проверка авторизации кошельком : if( ($aResponse = @json_decode( $this->request( 'person/state.action', 'json=json' ), true )) !== false && is_array( $aResponse['data'] ) && isset( $aResponse['data']['person'] ) && isset( $aResponse['data']['balances'] ) && $aResponse['data']['person'] == $iQiwiAccount ) { $this->iQiwiAccount = $aResponse['data']['person']; foreach( $aResponse['data']['balances'] as $sEquivalent => $dBalance ) $this->aBalances[$sEquivalent] = $dBalance; return; } } # Получение токена авторизации : $sResponse = $this->request( 'auth/login.action', array( 'login' => '+'.$iQiwiAccount, 'password' => $sPassword ), array( CURLOPT_HEADER => true ) ); # Сохранение cookies : $this->sCookies = self::parseCookies( $sResponse ); # Парсинг данных токена : if( count( $sToken = explode( 'token":"', $sResponse ) ) < 2 ) throw new Exception( 'error parse token 1' ); $sToken = explode( '"', $sToken[1] ); $sToken = $sToken[0]; # Авторизация при помощи токена : $sResponse = $this->request( 'auth/login.action', array( 'login' => '+'.$iQiwiAccount, 'loginToken' => $sToken, 'password' => $sPassword, 'source' => 'MENU' ), array( CURLOPT_HEADER => true ) ); $this->sCookies = self::parseCookies( $sResponse ); $sResponse = trim( mb_substr( $sResponse, mb_strpos( $sResponse, '{' ) ) ); if( ($aResponse = @json_decode( $sResponse, true )) === false ) throw new Exception( 'internal error' ); # Проверка авторизации кошельком : if( !isset( $aResponse['code'] ) || !isset( $aResponse['code']['value'] ) || $aResponse['code']['value'] != 0 ) throw new Exception( isset( $aResponse['message'] ) ? $aResponse['message'] : 'authorize error' ); # Получение информации об qiwi.кошельке : if( ($aResponse = @json_decode( $this->request( 'person/state.action', 'json=json' ), true )) === false ) throw new Exception( 'fatal error' ); if( !is_array( $aResponse['data'] ) || !isset( $aResponse['data']['person'] ) || !isset( $aResponse['data']['balances'] ) ) throw new Exception( var_export( $aResponse, true ) ); $this->iQiwiAccount = $aResponse['data']['person']; foreach( $aResponse['data']['balances'] as $sEquivalent => $dBalance ) $this->aBalances[$sEquivalent] = $dBalance; } public function GetHistory( $sStartDate, $sFinishDate ) { # Получение списка транзакций : $sResult = $this->request( 'user/report/list.action?daterange=true&start='.$sStartDate.'&finish='.$sFinishDate ); $aTransactions = array(); foreach( explode( '</div><div class="reportsLine ', str_replace( '> <', '><', preg_replace( '!\s+!u', ' ', $sResult ) ) ) as $iKey => $sValue ) { if( $iKey == 0 ) continue; $aData = array(); # Получение суммы счета : $aData['iID'] = explode( 'class="transaction">', $sValue ); if( count( $aData['iID'] ) < 2 ) continue; $aData['iID'] = explode( '</', $aData['iID'][1] ); $aData['iID'] = trim( $aData['iID'][0] ); # Получение даты и время : $aData['sDate'] = explode( 'class="date">', $sValue ); $aData['sDate'] = explode( '</', $aData['sDate'][1] ); $aData['sDate'] = trim( $aData['sDate'][0] ); $aData['sTime'] = explode( 'class="time">', $sValue ); $aData['sTime'] = explode( '</', $aData['sTime'][1] ); $aData['sTime'] = trim( $aData['sTime'][0] ); # Получение суммы и валюты счета : $aData['sAmount'] = explode( 'class="originalExpense"><span>', $sValue ); $aData['sAmount'] = explode( '</', $aData['sAmount'][1] ); $aData['sAmount'] = trim( $aData['sAmount'][0] ); # Получение суммы счета : $aData['dAmount'] = preg_replace( '/[^0-9\.]+/', '', str_replace( ',', '.', $aData['sAmount'] ) ) - 0; # Получение валюты счета : $aData['sCurrency'] = mb_strpos( $aData['sAmount'], 'руб.' ) !== false ? 'RUB' : (mb_strpos( $aData['sAmount'], 'долл.' ) !== false ? 'USD' : (mb_strpos( $aData['sAmount'], 'тенге.' ) !== false ? 'KZT' : 'NAN')); # Получение номера телефона корреспондента : $aData['iOpponentPhone'] = explode( 'class="opNumber">', $sValue ); $aData['iOpponentPhone'] = explode( '</', $aData['iOpponentPhone'][1] ); $aData['iOpponentPhone'] = trim( str_replace( '+', '', $aData['iOpponentPhone'][0] ) ); # Получение примечания : $aData['sComment'] = explode( 'class="comment">', $sValue ); $aData['sComment'] = explode( '</', $aData['sComment'][1] ); $aData['sComment'] = html_entity_decode( trim( $aData['sComment'][0] ), ENT_QUOTES, 'UTF-8' ); # Прибыль или расход ? $aData['sType'] = mb_strpos( $sValue, 'IncomeWithExpend expenditure' ) !== false ? 'EXPENDITURE' : (mb_strpos( $sValue, 'IncomeWithExpend income' ) !== false ? 'INCOME' : 'NAN'); # Получение статуса транзакции : $aData['sStatus'] = explode( '"', $sValue ); $aData['sStatus'] = trim( $aData['sStatus'][0] ); # Дополнительные проверки : if( $aData['iID'] == false ) { $aData['iID'] = explode( '{"txn":', $sValue ); $aData['iID'] = explode( '}', $aData['iID'][1] ); $aData['iID'] = $aData['iID'][0]; } $aTransactions['ID-'.$aData['iID']] = $aData; } return $aTransactions; } private function request( $sPath, $mPOST = null, $aOptions = array() ) { $oCURL = curl_init( 'https://w.qiwi.com/'.$sPath ); curl_setopt_array( $oCURL, array( CURLOPT_RETURNTRANSFER => true, CURLOPT_COOKIE => $this->sCookies, CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0', CURLOPT_HTTPHEADER => array( 'Accept: application/json, text/javascript, */*; q=0.01', 'X-Requested-With: XMLHttpRequest' ), CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false ) ); if( !is_null( $mPOST ) ) curl_setopt_array( $oCURL, array( CURLOPT_POST => true, CURLOPT_POSTFIELDS => is_array( $mPOST ) ? http_build_query( $mPOST ) : $mPOST, ) ); if( count( $aOptions ) ) curl_setopt_array( $oCURL, $aOptions ); $sResponse = curl_exec( $oCURL ); if( $sResponse === false || curl_errno( $oCURL ) != 0 ) throw new Exception( curl_error( $oCURL ), curl_errno( $oCURL ) ); curl_close( $oCURL ); return $sResponse; } private static function parseCookies( $sXML ) { $aCookies = array(); preg_match_all( '|Set-Cookie: (.*);|U', $sXML, $aCookies ); return implode( ';', $aCookies[1] ); } } ?>

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.60.0040.01118.28
8.3.50.0100.00717.93
8.3.40.0110.00718.54
8.3.30.0040.01118.54
8.3.20.0040.00420.41
8.3.10.0040.00423.56
8.3.00.0000.00819.26
8.2.180.0080.00818.29
8.2.170.0100.01022.96
8.2.160.0100.00720.65
8.2.150.0030.00625.66
8.2.140.0030.00624.66
8.2.130.0000.01017.50
8.2.120.0000.00726.35
8.2.110.0070.00321.08
8.2.100.0040.00817.91
8.2.90.0040.00418.03
8.2.80.0040.00420.51
8.2.70.0000.00817.63
8.2.60.0000.00817.50
8.2.50.0040.00418.05
8.2.40.0060.00319.35
8.2.30.0030.00620.67
8.2.20.0080.00017.65
8.2.10.0050.00218.14
8.2.00.0050.00318.07
8.1.280.0040.01125.92
8.1.270.0100.00023.78
8.1.260.0000.00828.09
8.1.250.0040.00428.09
8.1.240.0060.00322.32
8.1.230.0000.01221.15
8.1.220.0030.00517.74
8.1.210.0000.00818.99
8.1.200.0050.00317.54
8.1.190.0090.00017.22
8.1.180.0050.00318.10
8.1.170.0060.00318.56
8.1.160.0040.00422.15
8.1.150.0040.00418.80
8.1.140.0000.00919.46
8.1.130.0000.00717.50
8.1.120.0040.00417.41
8.1.110.0070.00417.47
8.1.100.0040.00417.41
8.1.90.0000.00717.42
8.1.80.0000.00817.46
8.1.70.0000.00717.27
8.1.60.0080.00017.62
8.1.50.0090.00017.43
8.1.40.0030.00617.55
8.1.30.0040.00417.70
8.1.20.0050.00317.47
8.1.10.0040.00417.43
8.1.00.0030.00517.34
8.0.300.0070.00020.20
8.0.290.0000.00816.63
8.0.280.0000.00818.48
8.0.270.0040.00417.30
8.0.260.0000.00716.72
8.0.250.0030.00516.86
8.0.240.0000.00816.91
8.0.230.0040.00416.92
8.0.220.0000.00716.91
8.0.210.0070.00016.89
8.0.200.0070.00017.05
8.0.190.0040.00416.98
8.0.180.0030.00616.84
8.0.170.0060.00316.84
8.0.160.0050.00316.91
8.0.150.0000.00816.76
8.0.140.0030.00616.76
8.0.130.0000.00613.27
8.0.120.0030.00516.77
8.0.110.0070.00016.97
8.0.100.0030.00716.90
8.0.90.0040.00416.78
8.0.80.0060.01016.97
8.0.70.0060.00316.90
8.0.60.0000.00816.91
8.0.50.0030.00516.82
8.0.30.0090.01017.00
8.0.20.0130.01417.40
8.0.10.0000.01017.10
8.0.00.0090.01016.73
7.4.330.0000.00516.83
7.4.320.0070.00016.43
7.4.300.0030.00316.52
7.4.290.0030.00316.64
7.4.280.0060.00316.54
7.4.270.0000.00816.50
7.4.260.0030.00316.36
7.4.250.0060.00316.57
7.4.240.0060.00116.60
7.4.230.0030.00516.64
7.4.220.0070.01116.61
7.4.210.0150.00016.64
7.4.200.0070.00016.43
7.4.160.0130.00316.54
7.4.150.0310.02517.40
7.4.140.0200.00217.86
7.4.130.0070.01016.54
7.4.120.0100.00916.49
7.4.110.0160.00816.38
7.4.100.0080.01616.34
7.4.90.0070.01116.48
7.4.80.0140.00319.39
7.4.70.0140.00416.64
7.4.60.0070.01016.58
7.4.50.0030.01316.41
7.4.40.0090.01416.63
7.4.30.0100.01316.58
7.4.00.0070.00914.70
7.3.330.0060.00013.18
7.3.320.0000.00513.18
7.3.310.0040.00416.12
7.3.300.0030.00316.32
7.3.290.0050.01016.31
7.3.280.0080.00716.33
7.3.270.0090.01617.40
7.3.260.0070.01016.27
7.3.250.0140.00416.43
7.3.240.0100.00816.57
7.3.230.0160.00316.39
7.3.210.0180.00616.61
7.3.200.0100.00716.53
7.3.190.0090.00616.48
7.3.180.0030.01316.25
7.3.170.0160.00016.33
7.3.160.0070.01416.16
7.3.120.0040.01214.53
7.3.110.0110.00714.75
7.3.100.0090.00614.82
7.3.90.0060.00314.64
7.3.80.0130.00314.53
7.3.70.0060.00614.89
7.3.60.0030.00614.82
7.3.50.0080.00414.69
7.3.40.0110.00314.71
7.3.30.0040.01114.83
7.3.20.0060.00616.47
7.3.10.0060.00316.36
7.3.00.0140.00016.52
7.2.330.0060.01216.49
7.2.320.0030.01616.68
7.2.310.0070.01116.59
7.2.300.0130.00616.49
7.2.290.0070.01116.38
7.2.250.0120.00615.23
7.2.240.0120.00614.89
7.2.230.0070.00715.10
7.2.220.0000.00914.84
7.2.210.0050.00514.80
7.2.200.0030.00914.95
7.2.190.0000.01214.93
7.2.180.0100.00615.07
7.2.170.0070.00714.96
7.2.00.0150.00419.02
7.1.330.0090.00615.63
7.1.320.0040.00415.50
7.1.310.0090.00315.70
7.1.300.0070.00715.71
7.1.290.0100.00315.66
7.1.280.0070.00715.52
7.1.270.0040.01115.63
7.1.260.0060.00615.37
7.1.100.0060.00617.75
7.1.70.0040.00416.84
7.1.60.0060.01919.48
7.1.50.0090.01316.53
7.1.00.0000.08022.46
7.0.200.0410.00414.33
7.0.100.0100.04320.14
7.0.90.0030.08720.02
7.0.80.0030.08719.98
7.0.70.0070.05020.08
7.0.60.0030.05020.08
7.0.50.0200.08020.41
7.0.40.0100.08020.11
7.0.30.0070.07320.15
7.0.20.0070.05020.08
7.0.10.0100.05720.07
7.0.00.0070.08720.08
5.6.280.0000.05720.99
5.6.250.0070.07020.73
5.6.240.0000.04720.77
5.6.230.0170.05020.66
5.6.220.0070.08020.63
5.6.210.0070.05720.69
5.6.200.0030.08321.12
5.6.190.0030.06721.15
5.6.180.0070.08021.02
5.6.170.0000.05321.09
5.6.160.0100.04321.12
5.6.150.0070.07721.24
5.6.140.0070.07721.17
5.6.130.0030.08721.15
5.6.120.0070.07021.16
5.6.110.0070.06721.00
5.6.100.0100.08721.16
5.6.90.0130.04021.06
5.6.80.0130.07020.58
5.6.70.0170.05020.47
5.6.60.0030.08320.59
5.6.50.0100.06020.46
5.6.40.0170.06720.56
5.6.30.0070.07320.53
5.6.20.0070.08020.36
5.6.10.0070.08020.42
5.6.00.0000.08020.43
5.5.380.0000.07320.39
5.5.370.0100.07720.45
5.5.360.0070.08320.62
5.5.350.0070.08320.52
5.5.340.0100.04720.89
5.5.330.0030.08320.84
5.5.320.0130.04720.96
5.5.310.0170.07320.84
5.5.300.0130.07320.79
5.5.290.0030.05720.80
5.5.280.0070.08020.98
5.5.270.0070.05020.89
5.5.260.0130.07720.70
5.5.250.0030.08720.75
5.5.240.0070.07320.29
5.5.230.0130.07320.38
5.5.220.0100.04720.25
5.5.210.0130.05720.24
5.5.200.0070.07720.15
5.5.190.0100.07020.34
5.5.180.0100.06320.31
5.5.160.0070.07720.20
5.5.150.0070.06720.05
5.5.140.0070.07020.22
5.5.130.0130.06720.34
5.5.120.0130.06720.33
5.5.110.0070.04720.18
5.5.100.0100.07320.15
5.5.90.0100.07020.24
5.5.80.0030.04020.23
5.5.70.0070.08020.23
5.5.60.0100.07720.21
5.5.50.0170.06320.22
5.5.40.0070.07320.15
5.5.30.0070.07320.12
5.5.20.0070.08020.12
5.5.10.0170.03320.04
5.5.00.0100.07320.13

preferences:
48.3 ms | 400 KiB | 5 Q