Japanese English

PHP deobfuscation, decryption, reconstruction tool

De-obfuscate PHP malware/viruses and tampering code on Wordpress to original readable code.

*Please note that not all obfuscation codes can be decoded.

Decoded the code below.

<?php function rf_first_menu() { global $menudef; global $rfname; $nw = time(); rfplay_title($nw); $piddata = rfgw_ffplay_pid(); $n = rfplay_pid_disp($piddata); echo_scr(2,""); $rcnt = rfgw_rec_cnt_all(); $n = 0; foreach($menudef as $m) { $ttl = $m['title']; $opt = $m['opt']; if ($ttl == "-") { e...



Obfuscated php code

<?php
 function rf_first_menu() { global $menudef; global $rfname; $nw = time(); rfplay_title($nw); $piddata = rfgw_ffplay_pid(); $n = rfplay_pid_disp($piddata); echo_scr(2,""); $rcnt = rfgw_rec_cnt_all(); $n = 0; foreach($menudef as $m) { $ttl = $m['title']; $opt = $m['opt']; if ($ttl == "-") { echo_menu(2,"",1); continue; } $n++; echo_menu(2,sprintf("%2d. %s",$n,$ttl),1); } $mn_max = count_73($menudef); echo_scr(2, ""); $ans = echo_select(2, $rfname."メニューを選択(1-".$mn_max.",end=x) : "); return $ans; } function rf_second_menu($ans) { global $menudef; global $menudef_s; global $menudef_t; $mn_cnt = count_73($menudef_s); if ($mn_cnt == 1) return 1; $fmt0 = "%2d. %s"; rfplay_subtitle(""); $n = 0; $m2 = array(); foreach($menudef_s as $m) { $ttl = $m['title']; if ($ttl == "-") { echo_menu(2,"",1); continue; } $n++; if ($m['opt'] == 0) { $ttl2 = sprintf($fmt0,$n,$ttl); } else { $ttl2 = sprintf($fmt0,$n,"-"); } echo_menu(2,$ttl2,1); $m2[$n] = $m['opt']; } echo_menu_ret_wt(); echo_scr(2, ""); $ans2 = echo_select(2, "サブメニューを選択(1-$n) : "); $ans2 = rfmenu_check_range($ans2,1,$n); if ($ans2 === false) { $ans2 = ""; } else { if ($m2[$ans2] == 1) $ans2 = ""; } return $ans2; } function rf_third_menu($ans,$ans2) { $ret = rfplay_menu_ans($ans, $ans2); return $ret; } function rf_para_check($str) { global $scr_height; global $scr_width; $ret[0] = 0; $ret[1] = 0; $ret[2] = 0; $ret[3] = 0; $para = explode(",",$str); $n = count_73($para); switch($n) { case 1: $ret[0] = $para[0]; break; case 2: $ret[0] = $para[0]; $ret[1] = $para[1]; break; case 4: $ret[0] = $para[0]; $ret[1] = $para[1]; $ret[2] = $para[2]; $ret[3] = $para[3]; break; default: break; } if (($ret[0] != 0) && ($ret[0] != 1)) $ret[0] = 0; if (($ret[1] != 0) && ($ret[1] != 1)) $ret[1] = 0; if ($ret[2] == 0) $ret[2] = $scr_height; if ($ret[3] == 3) $ret[2] = $scr_width; return $ret; } function rfplay_title($nw) { global $nowarea; global $rfriends_parts; global $radiru_area_1; global $rftitle; global $ui_mode; $dt = date("y/m/d(D) H:i:s", $nw); $tx11 = "rfplay"; $tx13 = $rfriends_parts[3]; $rftitle = "$tx11 $tx13 [$dt]"; $rfsubtitle = array(); if ($ui_mode == 0) { echo_scr(2, ""); echo_scr(2, "$rftitle"); } $radiko_ttl = "radiko: $nowarea"; $radiru_ttl = "radiru: ".$radiru_area_1; echo_msg(2," $radiko_ttl  $radiru_ttl"); } function rfplay_menu_ans($ans, $ans2) { global $menudef; global $menudef_s; global $menudef_t; global $ex_radiko; global $ex_timefree; global $ex_radiru; global $ex_radiru_vod; $ret = 0; switch ($ans) { case 1: rfplay_subtitle("聴取するラジコ番組を選択します。"); rfmenu_onair($ex_radiko); break; case 2: rfplay_subtitle("聴取するタイムフリー番組を選択します"); rfplay_timefree(); break; case 3: rfplay_subtitle("聴取するらじる番組を選択します。"); rfmenu_onair($ex_radiru); break; case 4: rfplay_subtitle("聴取するらじる聞き逃し番組を選択します。"); rfplay_vod(); break; case 5: rfplay_subtitle("聴取中止・音量調整を行います。"); rfmenu_play_vol(0); break; case 6: $ret = rfplay_ini($ans2); break; case 7: $ret = rfplay_about($ans2); break; default: break; } return($ret); } function rfplay_subtitle($mes) { global $ttl_no; global $ttl_mes; global $rfsubtitle; global $ui_mode; $rfsubtitle = array(); $mtmp = array(); if ($ttl_no[0] > 0) { $no = $ttl_no[1]; $m = $ttl_mes[1]; if (substr($m,0,1) == "-") { $m = substr($m,1); } $mtmp[] = "[$no] $m"; } if ($ttl_no[0] > 1) { $no = $ttl_no[1]."-".$ttl_no[2]; $m = $ttl_mes[2]; if (substr($m,0,1) == "-") { $m = substr($m,1); } $mtmp[] = "[$no] $m"; } if ($ttl_no[0] > 2) { $no = $ttl_no[1]."-".$ttl_no[2]."-".$ttl_no[3]; $m = $ttl_mes[3]; if (substr($m,0,1) == "-") { $m = substr($m,1); } $mtmp[] = "[$no] $m"; } if ($ui_mode == 0) { echo_scr(2, ""); foreach($mtmp as $m) { echo_msg(2,$m); } echo_scr(2,""); if ($mes != "") { echo_msg(2,$mes); echo_scr(2,""); } } else if ($ui_mode == 2) { echo_scr(2, ""); foreach($mtmp as $m) { echo_msg(2,$m); } echo_scr(2,""); if ($mes != "") { echo_msg(2,$mes); echo_scr(2,""); } } else { $rfsubtitle = $mtmp; if ($mes != "") { $rfsubtitle[] = $mes; } } } function rfplay_pid_disp($piddata) { if ($piddata === false) { return 0; } $n = count_73($piddata); if ($n < 1) { return 0; } echo_scr(2, ""); foreach($piddata as $pd) { $p = explode(",",$pd); $pid = $p[0]; $ch = $p[1]; $pn = $p[2]; $fmt = sprintf("%6s On air : %s", $pid,$ch); echo_msg(2,$fmt); } return $n; } function rfplay_piddata() { if (($piddata = rfgw_ffplay_pid()) === false) return ""; if (count_73($piddata) < 1) return ""; $p = explode(",",$piddata[0]); return $p[1]; } function rfplay_ini($msel) { switch ($msel) { case 1: rfplay_subtitle("パラメータを設定します。"); rfplay_parameter(); break; case 2: rfplay_subtitle("ラジコエリアを変更します。"); rfplay_radiko_area(); break; case 3: rfplay_subtitle("らじるエリアを変更します。"); rfplay_radiru_area(); break; default: break; } } function rfplay_about($msel) { global $cfgdir; global $rf_stp; $ret = 0; switch ($msel) { case 1: rfplay_subtitle("使用ソフトウエアについて"); rfplay_info_apps(); break; case 2: rfplay_subtitle("rfplayについて"); rfplay_info(); break; default: break; } return($ret); } function rfplay_timefree() { global $ex_timefree; $ch = rfmenu_rec_ch($ex_timefree); if ($ch == "") { return; } if ($ch === false) { echo_msg(2, "入力エラー"); rf_pause(); return; } echo_msg(2, "CH : $ch"); echo_msg(2, ""); $ans1 = rfmenu_rec_date($ex_timefree,2); if ($ans1 === false) { echo_msg(2, "入力エラー"); rf_pause(); return; } $dt = $ans1[0]; $cnt = $ans1[1]; if ($cnt <= 0) { return; } $dt = strtotime("$dt day"); $rsvdata = rfmenu_radiko_program($ch, $dt, $cnt); rfplay_rec_sel($ex_timefree, $rsvdata, $dt); } function rfplay_rec_sel($ex_type, $wdat, $dt) { global $area_code; global $ex_radiko; global $ex_radiru; global $ex_timefree; global $ex_radiru_vod; global $ex_radiru_gogaku; $dt0 = date("m/d",$dt); $rmes = "終了"; $imes = "どれを聴取しますか"; $ynmes = "聴取しますか (y/N) ?  : "; switch ($ex_type) { case $ex_radiko: case $ex_radiru: sort($wdat); $wdat = rfmenu_wdata_org($wdat); $wdat = rfmenu_del_passed_program($wdat); $ttl = "放送番組一覧"; break; case $ex_timefree: sort($wdat); $ttl = "放送済番組一覧[$dt0] "; break; case $ex_radiru_vod: case $ex_radiru_gogaku: rsort($wdat); $ttl = "放送済番組一覧"; break; default: $ttl = ""; break; } if (count_73($wdat) <= 0) { echo_msg(2,"リストが空です。"); rf_pause(); return; } $onairch = rfmenu_play_piddata(); while(1==1) { $wdat0 = rf_dat_sel_onair($ex_type, $wdat, $ttl, $onairch, $rmes, $imes); if ($wdat0 === true) { return; } if ($wdat0 === false) { continue; } $live = false; $flg = 0; $n = count_73($wdat0); if ($n == 1) { $para = get_para($wdat0[0], $ex_type); echo_msg(2," $para[8]"); if ($ex_type == $ex_radiko || $ex_type == $ex_radiru) { $onair = rf_program_onair_check($para); if ($onair === true) $live = true; } if ($ex_type == $ex_timefree) { $arc = rf_program_archive_check($para); if ($arc === true) $live = true; } } echo_msg(2, ""); if ($live === false) { echo_msg(2, "聴取できません。"); rf_pause(); continue; } echo_msg(2, ""); rfplay_live($ex_type,$para); rf_pause(); continue; } } function rfplay_vod() { global $tmpdir; global $radiru_recdir; global $radiru_vod_recdir; global $radiru_vod_url; global $radiru_gogaku_recdir; $rp = 0; $mcode_sel = rf_nhk_select(); if ($mcode_sel === false) { return; } $ond = ond_list($radiru_vod_url, $mcode_sel); rsort($ond); while ($rp == 0) { $rp = rfplay_ond_select($ond, $mcode_sel); } } function rfplay_ond_select($ond, $mcode_sel) { global $tmpdir; global $ex_radiru_vod; global $ex_radiru_gogaku; global $radiru_vod_recdir; global $radiru_vod_genre; global $radiru_gogaku_lang; global $rec_extension; global $scr_width; $ynmes = "聴取しますか ? (y/N) : "; $ttl = count_73($ond); if ($ttl < 1) { echo_msg(2, "番組がありません。"); rf_pause(); return -1; } $flist = array(); foreach ($ond as $nm) { $dtm = substr($nm[1], 2); if (strlen($nm[3]) <= 0) { $flst = $nm[2]; } else { $flst = $nm[2]."($nm[3])"; } if ($mcode_sel == -1) { } $bch = substr(ond_chconv2($nm[7])."    ",0,4); $flist[] = $dtm." $bch ".$flst; } switch ($mcode_sel) { case 0: $mc = "all"; break; case 5: $mc = "r1"; break; case 6: $mc = "r2"; break; case 7: $mc = "r3"; break; case -1: $mc = "ゴガク"; break; default: $mc = "?"; break; } $opt = array( "title" => "聞き逃し一覧($mc)", "input_type" => 0, "page_control" => 1, "return_mes" => "終了", "input_mes" => "番組を選択してください", "mode" => 0, "multi" => 0, "confirm" => 1, "ht_selid" => "" ); $no1 = rf_pctl_disp($flist, $opt); $ans = $no1[0]; if ($ans == "r") { return 1; } if ($ans == "e") { echo_msg(2, "入力エラー"); rf_pause(); return 1; } if ($ans == "z") { echo_msg(2, "リストが空です"); rf_pause(); return 1; } $no = $no1[0]; $no = $no - 1; $nm = $ond[$no]; $pic = $nm[5]; $pgm = $nm[2]; $ond2 = array(); $ond2 = ond_detail($nm); foreach ($ond2 as $key => $value) { $st[$key] = $value[2]; } array_multisort($st, SORT_DESC, $ond2); $ttl2 = count_73($ond2); if ($ttl2 < 1) { return -1; } $tnm = $nm[2]; if (strlen($nm[3]) > 0) { $tnm = "$tnm($nm[3])"; } $tnm2 = rf_strimwidth($tnm, 0, $scr_width-12); $no2 = array(); $flist2 = array(); foreach ($ond2 as $nm) { if ($nm[0] == "") { $nm[0] = "_"; } $dtx = sprintf( "%s/%s/%s", substr($nm[2], 2, 2), substr($nm[2], 4, 2), substr($nm[2], 6, 2) ); $pgm2 = $nm[3]; if (mb_substr($pgm2,0,mb_strlen($pgm)) == $pgm) { $pgm2 = mb_substr($pgm2, mb_strlen($pgm)); $pgm2 = mb_convert_kana($pgm2,'s'); $pgm2 = trim($pgm2); if (strlen($pgm2) == 0) { $pgm2 = $pgm; } } $flist2[] = "$dtx $pgm2"; } $opt = array( "title" => "$tnm2", "input_type" => 1, "page_control" => 1, "return_mes" => "戻る", "input_mes" => "どれを聴取しますか", "mode" => 0, "multi" => 0, "confirm" => 1, "ht_selid" => "" ); $no2 = rf_pctl_disp($flist2, $opt); $ans = $no2[0]; if ($ans == "r") { if ($ttl == 1) { return 1; } return 0; } if ($ans == "e") { echo_msg(2, "入力エラー"); rf_pause(); return 0; } if ($ans == "z") { echo_msg(2, "リストが空です"); rf_pause(); return 0; } $wdat = array(); foreach ($no2 as $no2_s) { $no2x = $no2_s - 1; $nm2 = $ond2[$no2x]; $url = $nm2[5]; $sta = "$nm2[1]"; $fn2 = $nm2[3]; $dt = "$nm2[2]"; $fns = fn_edit($nm2[4]); $sz = 200 - strlen($radiru_vod_recdir); $sz2 = strlen($fn2); if ($sz2 > $sz) { $fn2 = rf_strimwidth($fn2, 0, $sz); } $fn = fn_edit($fn2); $full_fn = $sta."_".$fn."_".$dt.".$rec_extension"; $tx = sprintf("%2d %s", $no2_s, $full_fn); echo_msg(2, $tx); $wdat[] = get_wdata_vod($url, $sta, $fn, ";", $dt, $pic, $radiru_vod_recdir, $fns); } $ex_type = $ex_radiru_vod; $live = false; $flg = 0; $n = count_73($wdat); if ($n == 1) { $para = get_para($wdat[0], $ex_type); $arc = rf_program_archive_check($para); if ($arc === true) $live = true; } if ($live === false) { echo_msg(2, "聴取できません。"); return 0; } echo_msg(2, ""); rfplay_live($ex_type,$para); rf_pause(); return 0; } function rfplay_live($ex_type,$para) { $flg = rfgw_check_sshd(); rfgw_reconnect_bd(); rfriends_live($ex_type,$para,$flg); } function rfplay_parameter() { global $bindir; global $tmpdir; global $scrdir; global $cfgdir; global $rfplayini; global $nowarea; global $home_area_code; global $rfplay_auth_mode; echo_msg(2, "現在の認証モードは $rfplay_auth_mode です。"); rfgw_play_text($cfgdir.$rfplayini); rf_pause(); return true; } function rfplay_radiko_area() { global $bindir; global $tmpdir; global $playdir; global $nowarea; global $home_area_code; global $radiko_auth_mode; global $radiko_auth_mode3_dat; echo_msg(2, "現在の認証モードは $radiko_auth_mode です。"); echo_msg(2, ""); if ($radiko_auth_mode != 3) { echo_msg(2, "このモードでは現在地変更はできません。"); rf_pause(); return true; } $old_gps_dat = $playdir."radiko_play.dat"; if (file_exists($old_gps_dat))fin_unlink($old_gps_dat); echo_msg(2, "現在地変更を行います(テストモード)。"); echo_msg(2, ""); echo_msg(2, "現在地 : $home_area_code"); pref_view(); echo_msg(2, ""); $ans = echo_input(2, "エリア番号は? (1-47): "); if ($ans == "") { return false; } if ($ans < 1 || $ans > 47) { return false; } if ($ans == 0) { $area = $home_area_code; } else { $area = sprintf("JP%d", $ans); } $no = rf_convjp($area); $ret = rf_device_f_lat_lon($no); if ($ret === false) return false; $lat = $ret[0]; $lon = $ret[1]; $ret = file_put_contents($radiko_auth_mode3_dat, "$lat,$lon", LOCK_EX); if ($ret !== false) { echo_scr(2, ""); echo_msgbox(2, "現在地 : $area($lat,$lon)"); } else { echo_scr(2, ""); echo_msgbox(2, "現在地の変更に失敗しました。"); return false; } return true; } function rfplay_radiru_area() { global $radiru_area_1; $stationdata = rf_radiru_station(); $mnu = array(); foreach($stationdata as $key => $val) { $val2 = substr($key."       ",0,10).": ".$val; $mnu[] = $val2; } if (array_key_exists($radiru_area_1,$stationdata)) { echo_msg(2, "現在のエリア : $radiru_area_1"); } else { echo_msg(2, "現在のエリア : unknown"); } echo_msg(2, ""); $ans = rf_sel_menu($mnu,1); if ($ans > 0) { echo_msg(2, "$ans ".$mnu[$ans-1]); $area = trim(substr($mnu[$ans-1],0,10)); if (!array_key_exists($area,$stationdata)) { echo_msg(2, "invalid key : $area"); } else { rfplay_radiru_putarea($area); $radiru_area_1 = $area; } } else { echo_scr(2, ""); echo_msg(2, "現在地の変更に失敗しました。"); } echo_msg(2, ""); echo_msgbox(2, "エリア : $radiru_area_1"); } function get_timefree_stream_url($area, $channel, $fromtime, $totime, $recfiletmp, $authtoken,$org) { global $timefree_pre_margin; global $timefree_post_margin; global $m3u8header; global $playlisturl; global $auth_token; $stream_url = ""; if ($timefree_pre_margin == 0 && $timefree_post_margin == 0) { $rectime = rf_radiko_make_rectime($channel,$fromtime,$totime,1); } else { $t_fr = get_mktime($fromtime) - $timefree_pre_margin; $t_to = get_mktime($totime) + $timefree_post_margin; $t_fr2 = date("YmdHis", $t_fr); $t_to2 = date("YmdHis", $t_to); $rectime = rf_radiko_make_rectime($channel,$t_fr2,$t_to2,1); } $purl = $playlisturl.$rectime; if ($org == 1) { return $purl; } file_put_contents("$recfiletmp.txt", $purl, LOCK_EX); $opt = $m3u8header . "--header=\"X-Radiko-AuthToken: $authtoken\" "; $exec_cmd = "wget -i $recfiletmp.txt -O $recfiletmp.m3u8 $opt "; $ret = external_program($exec_cmd); if ($ret != 0) { fin_unlink("$recfiletmp.txt"); fin_unlink("$recfiletmp.m3u8"); return $stream_url; } fin_unlink("$recfiletmp.txt"); $url = file("$recfiletmp.m3u8"); foreach ($url as $value) { if (substr($value, 0, 1) == "#") { continue; } if (substr($value, 0, 4) == "http" && strpos($value, "m3u8") !== false) { $value = str_replace(array("\r", "\n"), "", $value); $stream_url = $value; break; } } if ($stream_url == "") { return $stream_url; } fin_unlink("$recfiletmp.m3u8"); return $stream_url; } function rfplay_radiru_putarea($area) { global $radiruareafile; $fl = $radiruareafile; $parea = strtolower($area); file_put_contents($fl, $parea, LOCK_EX); return true; } function rfmenu_play_piddata() { if (($piddata = rfgw_ffplay_pid()) === false) return ""; if (count_73($piddata) < 1) return ""; $p = explode(",",$piddata[0]); return $p[1]; } function rfmenu_play_vol() { $piddata = rfgw_ffplay_pid(); if ($piddata === false) { echo_msg(2,"エラーが発生しました。"); rf_pause(); return; } $amixer = rfgw_amixer_utl(0); rf_amixer_sub($amixer); } function rfmenu_play_abort($mode) { if ($mode == 1) { if (($piddata = rfgw_ffplay_pid()) === false) return; if (rf_ffplay_pid_disp($piddata) < 1) return; rf_ffplay_pid_can($piddata); return; } $piddata = rfgw_ffplay_pid(); if ($piddata === false) { echo_msg(2,"エラーが発生しました。"); rf_pause(); return; } $n = rf_ffplay_pid_disp($piddata); if ($n < 1) { echo_msg(2, ""); echo_msg(2, "再生中のプロセスがありません。"); rf_pause(); return; } echo_msg(2, ""); $ans = echo_yesno(2, "再生を中止しますか? (y/N): "); if ($ans != "y" && $ans != "Y") { return; } echo_msg(2, ""); rf_ffplay_pid_can($piddata); echo_msg(2, ""); echo_msg(2, "再生を中止しました。"); rf_pause(); } function rfmenu_play_abort_all() { $piddata = rfgw_ffplay_pid(); if ($piddata === false) { return false; } $n = count_73($piddata); if ($n < 1) { return true; } rf_ffplay_pid_can($piddata); return true; } function rf_ffplay_pid_can($piddata) { foreach($piddata as $pd) { $p = explode(",",$pd); $pid = $p[0]; $pn = $p[1]; $ret = rfgw_rec_can($pid); } } function rf_ffplay_pid_disp($piddata) { if ($piddata === false) { return 0; } $n = count_73($piddata); if ($n < 1) { return 0; } echo_scr(2, ""); foreach($piddata as $pd) { $p = explode(",",$pd); $pid = $p[0]; $ch = $p[1]; $pn = $p[2]; $fmt = sprintf("%6s On air : %s", $pid,$ch); echo_msg(2,$fmt); } return $n; } function rfmenu_rec_ch($ex_type) { global $scrdir; global $rsvdir; global $phpdir; global $nowarea; global $home_area_code; global $area_code; global $nowarea; global $radiko_timeofbegin; global $schradiko_head; global $schradiru_head; global $radiru_ch; global $ex_radiko; global $ex_radiru; global $ex_timefree; global $ex_radiru_vod; $n = 0; switch ($ex_type) { case $ex_radiko: case $ex_timefree: $sch_name = "radiko"; $authtoken = auth_ex(0); echo_prn(1, "area : $nowarea ($area_code)"); $rk_sta = rf_radiko_station($area_code); foreach ($rk_sta as $key => $val) { if (!valid_chk($ex_radiko, $key)) { unset($rk_sta["$key"]); continue; } if ($ex_type == $ex_timefree) { $pos = strpos($val,"NHK"); if ($pos !== false) { if ($pos == 0) { unset($rk_sta["$key"]); continue; } } } $key2 = substr($key."          ", 0, 8); $n++; $no = sprintf("%2d", $n); echo_menu(2, "$no.  $key2 : $val",1); } break; case $ex_radiru: $sch_name = "radiru"; $radiru_ch2 = array(); foreach ($radiru_ch as $key) { if (!valid_chk($ex_radiru, $key)) { continue; } $radiru_ch2[] = $key; $n++; $no = sprintf("%2d", $n); $key2 = substr($key."          ", 0, 2); $val = "NHK"; echo_menu(2, "$no.  $key2 : $val",1); } $rk_sta = $radiru_ch2; break; default: return false; break; } echo_menu_ret_wt(); echo_msg(2, ""); if ($n < 1) { echo_msg(2, "リストが空です"); rf_pause(); return ""; } $ans = echo_ask(2, "CHの番号を入力してください (1-$n) : "); if ($ans == "" || $ans == "R" || $ans == "r") { return ""; } $ans = rfmenu_check_range($ans,1,$n); if ($ans === false) { echo_msg(2,"入力エラー"); rf_pause(); return; } switch ($ex_type) { case $ex_radiko: case $ex_timefree: $rk_sta2 = array_slice($rk_sta, $ans-1, 1, true); $ch = key($rk_sta2); $val = $rk_sta[$ch]; break; case $ex_radiru: $ch = $rk_sta[$ans - 1]; $val = "NHK"; break; default: $ch = ""; break; } return $ch; } function rfplay_info_apps() { echo_msg(2, "rfplay は以下のソフトウエアを使用しています。"); echo_msg(2, ""); $app = rfgw_info_app(); $phpexts = rf_php_ext(); echo_msg(2, ""); echo_msg(2, $app[0]); $str = ""; foreach($phpexts as $phpext) { $str .= " $phpext"; } echo_msg(2, $str); echo_msg(2, ""); echo_msg(2, $app[1]); echo_msg(2, $app[2]); echo_msg(2, $app[4]); echo_msg(2, $app[5]); echo_msg(2, ""); msgx('・<a href=https://www.gsi.go.jp/>国土地理院</a>'); msgx('・<a href=https://www.openstreetmap.org/copyright/ja>OpenStreetMap</a>'); echo_msg(2, ""); rf_pause(); } function rfplay_info() { global $base; global $rfriends; global $os_l; $rfriends_ver = trim(file_get_contents($base.$rfriends)); $rfplay_ver = str_replace("Rfriends","rfplay",$rfriends_ver,$cnt); echo_msg(2, $rfplay_ver); echo_msg(2, "rfriends2017(yahoo.co.jp), @rfriends2017"); echo_msg(2, ""); echo_msg(2, "OS : $os_l"); $pretty = rfgw_get_prettyname(); if ($pretty != "") echo_msg(2, "NAME : $pretty"); $ppid = rfgw_get_accessid(); echo_msg(2, "ACCESS   : $ppid"); $hn = getHostName(); echo_msg(2, "HOSTNAME : $hn"); $ip = rfgw_getip(); echo_msg(2, "IPADDR   : $ip"); rf_pause(); }

Decoded(de-Obfuscated) php code

<?php

function rf_first_menu()
{
    global $menudef;
    global $rfname;
    $nw = time();
    rfplay_title($nw);
    $piddata = rfgw_ffplay_pid();
    $n = rfplay_pid_disp($piddata);
    echo_scr(2, "");
    $rcnt = rfgw_rec_cnt_all();
    $n = 0;
    foreach ($menudef as $m) {
        $ttl = $m['title'];
        $opt = $m['opt'];
        if ($ttl == "-") {
            echo_menu(2, "", 1);
            continue;
        }
        $n++;
        echo_menu(2, sprintf("%2d. %s", $n, $ttl), 1);
    }
    $mn_max = count_73($menudef);
    echo_scr(2, "");
    $ans = echo_select(2, $rfname . "メニューを選択(1-" . $mn_max . ",end=x) : ");
    return $ans;
}
function rf_second_menu($ans)
{
    global $menudef;
    global $menudef_s;
    global $menudef_t;
    $mn_cnt = count_73($menudef_s);
    if ($mn_cnt == 1) {
        return 1;
    }
    $fmt0 = "%2d. %s";
    rfplay_subtitle("");
    $n = 0;
    $m2 = array();
    foreach ($menudef_s as $m) {
        $ttl = $m['title'];
        if ($ttl == "-") {
            echo_menu(2, "", 1);
            continue;
        }
        $n++;
        if ($m['opt'] == 0) {
            $ttl2 = sprintf($fmt0, $n, $ttl);
        } else {
            $ttl2 = sprintf($fmt0, $n, "-");
        }
        echo_menu(2, $ttl2, 1);
        $m2[$n] = $m['opt'];
    }
    echo_menu_ret_wt();
    echo_scr(2, "");
    $ans2 = echo_select(2, "サブメニューを選択(1-{$n}) : ");
    $ans2 = rfmenu_check_range($ans2, 1, $n);
    if ($ans2 === false) {
        $ans2 = "";
    } else {
        if ($m2[$ans2] == 1) {
            $ans2 = "";
        }
    }
    return $ans2;
}
function rf_third_menu($ans, $ans2)
{
    $ret = rfplay_menu_ans($ans, $ans2);
    return $ret;
}
function rf_para_check($str)
{
    global $scr_height;
    global $scr_width;
    $ret[0] = 0;
    $ret[1] = 0;
    $ret[2] = 0;
    $ret[3] = 0;
    $para = explode(",", $str);
    $n = count_73($para);
    switch ($n) {
        case 1:
            $ret[0] = $para[0];
            break;
        case 2:
            $ret[0] = $para[0];
            $ret[1] = $para[1];
            break;
        case 4:
            $ret[0] = $para[0];
            $ret[1] = $para[1];
            $ret[2] = $para[2];
            $ret[3] = $para[3];
            break;
        default:
            break;
    }
    if ($ret[0] != 0 && $ret[0] != 1) {
        $ret[0] = 0;
    }
    if ($ret[1] != 0 && $ret[1] != 1) {
        $ret[1] = 0;
    }
    if ($ret[2] == 0) {
        $ret[2] = $scr_height;
    }
    if ($ret[3] == 3) {
        $ret[2] = $scr_width;
    }
    return $ret;
}
function rfplay_title($nw)
{
    global $nowarea;
    global $rfriends_parts;
    global $radiru_area_1;
    global $rftitle;
    global $ui_mode;
    $dt = date("y/m/d(D) H:i:s", $nw);
    $tx11 = "rfplay";
    $tx13 = $rfriends_parts[3];
    $rftitle = "{$tx11} {$tx13} [{$dt}]";
    $rfsubtitle = array();
    if ($ui_mode == 0) {
        echo_scr(2, "");
        echo_scr(2, "{$rftitle}");
    }
    $radiko_ttl = "radiko: {$nowarea}";
    $radiru_ttl = "radiru: " . $radiru_area_1;
    echo_msg(2, " {$radiko_ttl}  {$radiru_ttl}");
}
function rfplay_menu_ans($ans, $ans2)
{
    global $menudef;
    global $menudef_s;
    global $menudef_t;
    global $ex_radiko;
    global $ex_timefree;
    global $ex_radiru;
    global $ex_radiru_vod;
    $ret = 0;
    switch ($ans) {
        case 1:
            rfplay_subtitle("聴取するラジコ番組を選択します。");
            rfmenu_onair($ex_radiko);
            break;
        case 2:
            rfplay_subtitle("聴取するタイムフリー番組を選択します");
            rfplay_timefree();
            break;
        case 3:
            rfplay_subtitle("聴取するらじる番組を選択します。");
            rfmenu_onair($ex_radiru);
            break;
        case 4:
            rfplay_subtitle("聴取するらじる聞き逃し番組を選択します。");
            rfplay_vod();
            break;
        case 5:
            rfplay_subtitle("聴取中止・音量調整を行います。");
            rfmenu_play_vol(0);
            break;
        case 6:
            $ret = rfplay_ini($ans2);
            break;
        case 7:
            $ret = rfplay_about($ans2);
            break;
        default:
            break;
    }
    return $ret;
}
function rfplay_subtitle($mes)
{
    global $ttl_no;
    global $ttl_mes;
    global $rfsubtitle;
    global $ui_mode;
    $rfsubtitle = array();
    $mtmp = array();
    if ($ttl_no[0] > 0) {
        $no = $ttl_no[1];
        $m = $ttl_mes[1];
        if (substr($m, 0, 1) == "-") {
            $m = substr($m, 1);
        }
        $mtmp[] = "[{$no}] {$m}";
    }
    if ($ttl_no[0] > 1) {
        $no = $ttl_no[1] . "-" . $ttl_no[2];
        $m = $ttl_mes[2];
        if (substr($m, 0, 1) == "-") {
            $m = substr($m, 1);
        }
        $mtmp[] = "[{$no}] {$m}";
    }
    if ($ttl_no[0] > 2) {
        $no = $ttl_no[1] . "-" . $ttl_no[2] . "-" . $ttl_no[3];
        $m = $ttl_mes[3];
        if (substr($m, 0, 1) == "-") {
            $m = substr($m, 1);
        }
        $mtmp[] = "[{$no}] {$m}";
    }
    if ($ui_mode == 0) {
        echo_scr(2, "");
        foreach ($mtmp as $m) {
            echo_msg(2, $m);
        }
        echo_scr(2, "");
        if ($mes != "") {
            echo_msg(2, $mes);
            echo_scr(2, "");
        }
    } else {
        if ($ui_mode == 2) {
            echo_scr(2, "");
            foreach ($mtmp as $m) {
                echo_msg(2, $m);
            }
            echo_scr(2, "");
            if ($mes != "") {
                echo_msg(2, $mes);
                echo_scr(2, "");
            }
        } else {
            $rfsubtitle = $mtmp;
            if ($mes != "") {
                $rfsubtitle[] = $mes;
            }
        }
    }
}
function rfplay_pid_disp($piddata)
{
    if ($piddata === false) {
        return 0;
    }
    $n = count_73($piddata);
    if ($n < 1) {
        return 0;
    }
    echo_scr(2, "");
    foreach ($piddata as $pd) {
        $p = explode(",", $pd);
        $pid = $p[0];
        $ch = $p[1];
        $pn = $p[2];
        $fmt = sprintf("%6s On air : %s", $pid, $ch);
        echo_msg(2, $fmt);
    }
    return $n;
}
function rfplay_piddata()
{
    if (($piddata = rfgw_ffplay_pid()) === false) {
        return "";
    }
    if (count_73($piddata) < 1) {
        return "";
    }
    $p = explode(",", $piddata[0]);
    return $p[1];
}
function rfplay_ini($msel)
{
    switch ($msel) {
        case 1:
            rfplay_subtitle("パラメータを設定します。");
            rfplay_parameter();
            break;
        case 2:
            rfplay_subtitle("ラジコエリアを変更します。");
            rfplay_radiko_area();
            break;
        case 3:
            rfplay_subtitle("らじるエリアを変更します。");
            rfplay_radiru_area();
            break;
        default:
            break;
    }
}
function rfplay_about($msel)
{
    global $cfgdir;
    global $rf_stp;
    $ret = 0;
    switch ($msel) {
        case 1:
            rfplay_subtitle("使用ソフトウエアについて");
            rfplay_info_apps();
            break;
        case 2:
            rfplay_subtitle("rfplayについて");
            rfplay_info();
            break;
        default:
            break;
    }
    return $ret;
}
function rfplay_timefree()
{
    global $ex_timefree;
    $ch = rfmenu_rec_ch($ex_timefree);
    if ($ch == "") {
        return;
    }
    if ($ch === false) {
        echo_msg(2, "入力エラー");
        rf_pause();
        return;
    }
    echo_msg(2, "CH : {$ch}");
    echo_msg(2, "");
    $ans1 = rfmenu_rec_date($ex_timefree, 2);
    if ($ans1 === false) {
        echo_msg(2, "入力エラー");
        rf_pause();
        return;
    }
    $dt = $ans1[0];
    $cnt = $ans1[1];
    if ($cnt <= 0) {
        return;
    }
    $dt = strtotime("{$dt} day");
    $rsvdata = rfmenu_radiko_program($ch, $dt, $cnt);
    rfplay_rec_sel($ex_timefree, $rsvdata, $dt);
}
function rfplay_rec_sel($ex_type, $wdat, $dt)
{
    global $area_code;
    global $ex_radiko;
    global $ex_radiru;
    global $ex_timefree;
    global $ex_radiru_vod;
    global $ex_radiru_gogaku;
    $dt0 = date("m/d", $dt);
    $rmes = "終了";
    $imes = "どれを聴取しますか";
    $ynmes = "聴取しますか (y/N) ?  : ";
    switch ($ex_type) {
        case $ex_radiko:
        case $ex_radiru:
            sort($wdat);
            $wdat = rfmenu_wdata_org($wdat);
            $wdat = rfmenu_del_passed_program($wdat);
            $ttl = "放送番組一覧";
            break;
        case $ex_timefree:
            sort($wdat);
            $ttl = "放送済番組一覧[{$dt0}] ";
            break;
        case $ex_radiru_vod:
        case $ex_radiru_gogaku:
            rsort($wdat);
            $ttl = "放送済番組一覧";
            break;
        default:
            $ttl = "";
            break;
    }
    if (count_73($wdat) <= 0) {
        echo_msg(2, "リストが空です。");
        rf_pause();
        return;
    }
    $onairch = rfmenu_play_piddata();
    while (true) {
        $wdat0 = rf_dat_sel_onair($ex_type, $wdat, $ttl, $onairch, $rmes, $imes);
        if ($wdat0 === true) {
            return;
        }
        if ($wdat0 === false) {
            continue;
        }
        $live = false;
        $flg = 0;
        $n = count_73($wdat0);
        if ($n == 1) {
            $para = get_para($wdat0[0], $ex_type);
            echo_msg(2, " {$para[8]}");
            if ($ex_type == $ex_radiko || $ex_type == $ex_radiru) {
                $onair = rf_program_onair_check($para);
                if ($onair === true) {
                    $live = true;
                }
            }
            if ($ex_type == $ex_timefree) {
                $arc = rf_program_archive_check($para);
                if ($arc === true) {
                    $live = true;
                }
            }
        }
        echo_msg(2, "");
        if ($live === false) {
            echo_msg(2, "聴取できません。");
            rf_pause();
            continue;
        }
        echo_msg(2, "");
        rfplay_live($ex_type, $para);
        rf_pause();
        continue;
    }
}
function rfplay_vod()
{
    global $tmpdir;
    global $radiru_recdir;
    global $radiru_vod_recdir;
    global $radiru_vod_url;
    global $radiru_gogaku_recdir;
    $rp = 0;
    $mcode_sel = rf_nhk_select();
    if ($mcode_sel === false) {
        return;
    }
    $ond = ond_list($radiru_vod_url, $mcode_sel);
    rsort($ond);
    while ($rp == 0) {
        $rp = rfplay_ond_select($ond, $mcode_sel);
    }
}
function rfplay_ond_select($ond, $mcode_sel)
{
    global $tmpdir;
    global $ex_radiru_vod;
    global $ex_radiru_gogaku;
    global $radiru_vod_recdir;
    global $radiru_vod_genre;
    global $radiru_gogaku_lang;
    global $rec_extension;
    global $scr_width;
    $ynmes = "聴取しますか ? (y/N) : ";
    $ttl = count_73($ond);
    if ($ttl < 1) {
        echo_msg(2, "番組がありません。");
        rf_pause();
        return 1;
    }
    $flist = array();
    foreach ($ond as $nm) {
        $dtm = substr($nm[1], 2);
        if (strlen($nm[3]) <= 0) {
            $flst = $nm[2];
        } else {
            $flst = $nm[2] . "({$nm[3]})";
        }
        if ($mcode_sel == 1) {
        }
        $bch = substr(ond_chconv2($nm[7]) . "    ", 0, 4);
        $flist[] = $dtm . " {$bch} " . $flst;
    }
    switch ($mcode_sel) {
        case 0:
            $mc = "all";
            break;
        case 5:
            $mc = "r1";
            break;
        case 6:
            $mc = "r2";
            break;
        case 7:
            $mc = "r3";
            break;
        case 1:
            $mc = "ゴガク";
            break;
        default:
            $mc = "?";
            break;
    }
    $opt = array("title" => "聞き逃し一覧({$mc})", "input_type" => 0, "page_control" => 1, "return_mes" => "終了", "input_mes" => "番組を選択してください", "mode" => 0, "multi" => 0, "confirm" => 1, "ht_selid" => "");
    $no1 = rf_pctl_disp($flist, $opt);
    $ans = $no1[0];
    if ($ans == "r") {
        return 1;
    }
    if ($ans == "e") {
        echo_msg(2, "入力エラー");
        rf_pause();
        return 1;
    }
    if ($ans == "z") {
        echo_msg(2, "リストが空です");
        rf_pause();
        return 1;
    }
    $no = $no1[0];
    $no -= 1;
    $nm = $ond[$no];
    $pic = $nm[5];
    $pgm = $nm[2];
    $ond2 = array();
    $ond2 = ond_detail($nm);
    foreach ($ond2 as $key => $value) {
        $st[$key] = $value[2];
    }
    array_multisort($st, SORT_DESC, $ond2);
    $ttl2 = count_73($ond2);
    if ($ttl2 < 1) {
        return 1;
    }
    $tnm = $nm[2];
    if (strlen($nm[3]) > 0) {
        $tnm = "{$tnm}({$nm[3]})";
    }
    $tnm2 = rf_strimwidth($tnm, 0, $scr_width - 12);
    $no2 = array();
    $flist2 = array();
    foreach ($ond2 as $nm) {
        if ($nm[0] == "") {
            $nm[0] = "_";
        }
        $dtx = sprintf("%s/%s/%s", substr($nm[2], 2, 2), substr($nm[2], 4, 2), substr($nm[2], 6, 2));
        $pgm2 = $nm[3];
        if (mb_substr($pgm2, 0, mb_strlen($pgm)) == $pgm) {
            $pgm2 = mb_substr($pgm2, mb_strlen($pgm));
            $pgm2 = mb_convert_kana($pgm2, 's');
            $pgm2 = trim($pgm2);
            if (strlen($pgm2) == 0) {
                $pgm2 = $pgm;
            }
        }
        $flist2[] = "{$dtx} {$pgm2}";
    }
    $opt = array("title" => "{$tnm2}", "input_type" => 1, "page_control" => 1, "return_mes" => "戻る", "input_mes" => "どれを聴取しますか", "mode" => 0, "multi" => 0, "confirm" => 1, "ht_selid" => "");
    $no2 = rf_pctl_disp($flist2, $opt);
    $ans = $no2[0];
    if ($ans == "r") {
        if ($ttl == 1) {
            return 1;
        }
        return 0;
    }
    if ($ans == "e") {
        echo_msg(2, "入力エラー");
        rf_pause();
        return 0;
    }
    if ($ans == "z") {
        echo_msg(2, "リストが空です");
        rf_pause();
        return 0;
    }
    $wdat = array();
    foreach ($no2 as $no2_s) {
        $no2x = $no2_s - 1;
        $nm2 = $ond2[$no2x];
        $url = $nm2[5];
        $sta = "{$nm2[1]}";
        $fn2 = $nm2[3];
        $dt = "{$nm2[2]}";
        $fns = fn_edit($nm2[4]);
        $sz = 200 - strlen($radiru_vod_recdir);
        $sz2 = strlen($fn2);
        if ($sz2 > $sz) {
            $fn2 = rf_strimwidth($fn2, 0, $sz);
        }
        $fn = fn_edit($fn2);
        $full_fn = $sta . "_" . $fn . "_" . $dt . ".{$rec_extension}";
        $tx = sprintf("%2d %s", $no2_s, $full_fn);
        echo_msg(2, $tx);
        $wdat[] = get_wdata_vod($url, $sta, $fn, ";", $dt, $pic, $radiru_vod_recdir, $fns);
    }
    $ex_type = $ex_radiru_vod;
    $live = false;
    $flg = 0;
    $n = count_73($wdat);
    if ($n == 1) {
        $para = get_para($wdat[0], $ex_type);
        $arc = rf_program_archive_check($para);
        if ($arc === true) {
            $live = true;
        }
    }
    if ($live === false) {
        echo_msg(2, "聴取できません。");
        return 0;
    }
    echo_msg(2, "");
    rfplay_live($ex_type, $para);
    rf_pause();
    return 0;
}
function rfplay_live($ex_type, $para)
{
    $flg = rfgw_check_sshd();
    rfgw_reconnect_bd();
    rfriends_live($ex_type, $para, $flg);
}
function rfplay_parameter()
{
    global $bindir;
    global $tmpdir;
    global $scrdir;
    global $cfgdir;
    global $rfplayini;
    global $nowarea;
    global $home_area_code;
    global $rfplay_auth_mode;
    echo_msg(2, "現在の認証モードは {$rfplay_auth_mode} です。");
    rfgw_play_text($cfgdir . $rfplayini);
    rf_pause();
    return true;
}
function rfplay_radiko_area()
{
    global $bindir;
    global $tmpdir;
    global $playdir;
    global $nowarea;
    global $home_area_code;
    global $radiko_auth_mode;
    global $radiko_auth_mode3_dat;
    echo_msg(2, "現在の認証モードは {$radiko_auth_mode} です。");
    echo_msg(2, "");
    if ($radiko_auth_mode != 3) {
        echo_msg(2, "このモードでは現在地変更はできません。");
        rf_pause();
        return true;
    }
    $old_gps_dat = $playdir . "radiko_play.dat";
    if (file_exists($old_gps_dat)) {
        fin_unlink($old_gps_dat);
    }
    echo_msg(2, "現在地変更を行います(テストモード)。");
    echo_msg(2, "");
    echo_msg(2, "現在地 : {$home_area_code}");
    pref_view();
    echo_msg(2, "");
    $ans = echo_input(2, "エリア番号は? (1-47): ");
    if ($ans == "") {
        return false;
    }
    if ($ans < 1 || $ans > 47) {
        return false;
    }
    if ($ans == 0) {
        $area = $home_area_code;
    } else {
        $area = sprintf("JP%d", $ans);
    }
    $no = rf_convjp($area);
    $ret = rf_device_f_lat_lon($no);
    if ($ret === false) {
        return false;
    }
    $lat = $ret[0];
    $lon = $ret[1];
    $ret = file_put_contents($radiko_auth_mode3_dat, "{$lat},{$lon}", LOCK_EX);
    if ($ret !== false) {
        echo_scr(2, "");
        echo_msgbox(2, "現在地 : {$area}({$lat},{$lon})");
    } else {
        echo_scr(2, "");
        echo_msgbox(2, "現在地の変更に失敗しました。");
        return false;
    }
    return true;
}
function rfplay_radiru_area()
{
    global $radiru_area_1;
    $stationdata = rf_radiru_station();
    $mnu = array();
    foreach ($stationdata as $key => $val) {
        $val2 = substr($key . "       ", 0, 10) . ": " . $val;
        $mnu[] = $val2;
    }
    if (array_key_exists($radiru_area_1, $stationdata)) {
        echo_msg(2, "現在のエリア : {$radiru_area_1}");
    } else {
        echo_msg(2, "現在のエリア : unknown");
    }
    echo_msg(2, "");
    $ans = rf_sel_menu($mnu, 1);
    if ($ans > 0) {
        echo_msg(2, "{$ans} " . $mnu[$ans - 1]);
        $area = trim(substr($mnu[$ans - 1], 0, 10));
        if (!array_key_exists($area, $stationdata)) {
            echo_msg(2, "invalid key : {$area}");
        } else {
            rfplay_radiru_putarea($area);
            $radiru_area_1 = $area;
        }
    } else {
        echo_scr(2, "");
        echo_msg(2, "現在地の変更に失敗しました。");
    }
    echo_msg(2, "");
    echo_msgbox(2, "エリア : {$radiru_area_1}");
}
function get_timefree_stream_url($area, $channel, $fromtime, $totime, $recfiletmp, $authtoken, $org)
{
    global $timefree_pre_margin;
    global $timefree_post_margin;
    global $m3u8header;
    global $playlisturl;
    global $auth_token;
    $stream_url = "";
    if ($timefree_pre_margin == 0 && $timefree_post_margin == 0) {
        $rectime = rf_radiko_make_rectime($channel, $fromtime, $totime, 1);
    } else {
        $t_fr = get_mktime($fromtime) - $timefree_pre_margin;
        $t_to = get_mktime($totime) + $timefree_post_margin;
        $t_fr2 = date("YmdHis", $t_fr);
        $t_to2 = date("YmdHis", $t_to);
        $rectime = rf_radiko_make_rectime($channel, $t_fr2, $t_to2, 1);
    }
    $purl = $playlisturl . $rectime;
    if ($org == 1) {
        return $purl;
    }
    file_put_contents("{$recfiletmp}.txt", $purl, LOCK_EX);
    $opt = $m3u8header . "--header=\"X-Radiko-AuthToken: {$authtoken}\" ";
    $exec_cmd = "wget -i {$recfiletmp}.txt -O {$recfiletmp}.m3u8 {$opt} ";
    $ret = external_program($exec_cmd);
    if ($ret != 0) {
        fin_unlink("{$recfiletmp}.txt");
        fin_unlink("{$recfiletmp}.m3u8");
        return $stream_url;
    }
    fin_unlink("{$recfiletmp}.txt");
    $url = file("{$recfiletmp}.m3u8");
    foreach ($url as $value) {
        if (substr($value, 0, 1) == "#") {
            continue;
        }
        if (substr($value, 0, 4) == "http" && strpos($value, "m3u8") !== false) {
            $value = str_replace(array("\r", "\n"), "", $value);
            $stream_url = $value;
            break;
        }
    }
    if ($stream_url == "") {
        return $stream_url;
    }
    fin_unlink("{$recfiletmp}.m3u8");
    return $stream_url;
}
function rfplay_radiru_putarea($area)
{
    global $radiruareafile;
    $fl = $radiruareafile;
    $parea = strtolower($area);
    file_put_contents($fl, $parea, LOCK_EX);
    return true;
}
function rfmenu_play_piddata()
{
    if (($piddata = rfgw_ffplay_pid()) === false) {
        return "";
    }
    if (count_73($piddata) < 1) {
        return "";
    }
    $p = explode(",", $piddata[0]);
    return $p[1];
}
function rfmenu_play_vol()
{
    $piddata = rfgw_ffplay_pid();
    if ($piddata === false) {
        echo_msg(2, "エラーが発生しました。");
        rf_pause();
        return;
    }
    $amixer = rfgw_amixer_utl(0);
    rf_amixer_sub($amixer);
}
function rfmenu_play_abort($mode)
{
    if ($mode == 1) {
        if (($piddata = rfgw_ffplay_pid()) === false) {
            return;
        }
        if (rf_ffplay_pid_disp($piddata) < 1) {
            return;
        }
        rf_ffplay_pid_can($piddata);
        return;
    }
    $piddata = rfgw_ffplay_pid();
    if ($piddata === false) {
        echo_msg(2, "エラーが発生しました。");
        rf_pause();
        return;
    }
    $n = rf_ffplay_pid_disp($piddata);
    if ($n < 1) {
        echo_msg(2, "");
        echo_msg(2, "再生中のプロセスがありません。");
        rf_pause();
        return;
    }
    echo_msg(2, "");
    $ans = echo_yesno(2, "再生を中止しますか? (y/N): ");
    if ($ans != "y" && $ans != "Y") {
        return;
    }
    echo_msg(2, "");
    rf_ffplay_pid_can($piddata);
    echo_msg(2, "");
    echo_msg(2, "再生を中止しました。");
    rf_pause();
}
function rfmenu_play_abort_all()
{
    $piddata = rfgw_ffplay_pid();
    if ($piddata === false) {
        return false;
    }
    $n = count_73($piddata);
    if ($n < 1) {
        return true;
    }
    rf_ffplay_pid_can($piddata);
    return true;
}
function rf_ffplay_pid_can($piddata)
{
    foreach ($piddata as $pd) {
        $p = explode(",", $pd);
        $pid = $p[0];
        $pn = $p[1];
        $ret = rfgw_rec_can($pid);
    }
}
function rf_ffplay_pid_disp($piddata)
{
    if ($piddata === false) {
        return 0;
    }
    $n = count_73($piddata);
    if ($n < 1) {
        return 0;
    }
    echo_scr(2, "");
    foreach ($piddata as $pd) {
        $p = explode(",", $pd);
        $pid = $p[0];
        $ch = $p[1];
        $pn = $p[2];
        $fmt = sprintf("%6s On air : %s", $pid, $ch);
        echo_msg(2, $fmt);
    }
    return $n;
}
function rfmenu_rec_ch($ex_type)
{
    global $scrdir;
    global $rsvdir;
    global $phpdir;
    global $nowarea;
    global $home_area_code;
    global $area_code;
    global $nowarea;
    global $radiko_timeofbegin;
    global $schradiko_head;
    global $schradiru_head;
    global $radiru_ch;
    global $ex_radiko;
    global $ex_radiru;
    global $ex_timefree;
    global $ex_radiru_vod;
    $n = 0;
    switch ($ex_type) {
        case $ex_radiko:
        case $ex_timefree:
            $sch_name = "radiko";
            $authtoken = auth_ex(0);
            echo_prn(1, "area : {$nowarea} ({$area_code})");
            $rk_sta = rf_radiko_station($area_code);
            foreach ($rk_sta as $key => $val) {
                if (!valid_chk($ex_radiko, $key)) {
                    unset($rk_sta["{$key}"]);
                    continue;
                }
                if ($ex_type == $ex_timefree) {
                    $pos = strpos($val, "NHK");
                    if ($pos !== false) {
                        if ($pos == 0) {
                            unset($rk_sta["{$key}"]);
                            continue;
                        }
                    }
                }
                $key2 = substr($key . "          ", 0, 8);
                $n++;
                $no = sprintf("%2d", $n);
                echo_menu(2, "{$no}.  {$key2} : {$val}", 1);
            }
            break;
        case $ex_radiru:
            $sch_name = "radiru";
            $radiru_ch2 = array();
            foreach ($radiru_ch as $key) {
                if (!valid_chk($ex_radiru, $key)) {
                    continue;
                }
                $radiru_ch2[] = $key;
                $n++;
                $no = sprintf("%2d", $n);
                $key2 = substr($key . "          ", 0, 2);
                $val = "NHK";
                echo_menu(2, "{$no}.  {$key2} : {$val}", 1);
            }
            $rk_sta = $radiru_ch2;
            break;
        default:
            return false;
    }
    echo_menu_ret_wt();
    echo_msg(2, "");
    if ($n < 1) {
        echo_msg(2, "リストが空です");
        rf_pause();
        return "";
    }
    $ans = echo_ask(2, "CHの番号を入力してください (1-{$n}) : ");
    if ($ans == "" || $ans == "R" || $ans == "r") {
        return "";
    }
    $ans = rfmenu_check_range($ans, 1, $n);
    if ($ans === false) {
        echo_msg(2, "入力エラー");
        rf_pause();
        return;
    }
    switch ($ex_type) {
        case $ex_radiko:
        case $ex_timefree:
            $rk_sta2 = array_slice($rk_sta, $ans - 1, 1, true);
            $ch = key($rk_sta2);
            $val = $rk_sta[$ch];
            break;
        case $ex_radiru:
            $ch = $rk_sta[$ans - 1];
            $val = "NHK";
            break;
        default:
            $ch = "";
            break;
    }
    return $ch;
}
function rfplay_info_apps()
{
    echo_msg(2, "rfplay は以下のソフトウエアを使用しています。");
    echo_msg(2, "");
    $app = rfgw_info_app();
    $phpexts = rf_php_ext();
    echo_msg(2, "");
    echo_msg(2, $app[0]);
    $str = "";
    foreach ($phpexts as $phpext) {
        $str .= " {$phpext}";
    }
    echo_msg(2, $str);
    echo_msg(2, "");
    echo_msg(2, $app[1]);
    echo_msg(2, $app[2]);
    echo_msg(2, $app[4]);
    echo_msg(2, $app[5]);
    echo_msg(2, "");
    msgx('・<a href=https://www.gsi.go.jp/>国土地理院</a>');
    msgx('・<a href=https://www.openstreetmap.org/copyright/ja>OpenStreetMap</a>');
    echo_msg(2, "");
    rf_pause();
}
function rfplay_info()
{
    global $base;
    global $rfriends;
    global $os_l;
    $rfriends_ver = trim(file_get_contents($base . $rfriends));
    $rfplay_ver = str_replace("Rfriends", "rfplay", $rfriends_ver, $cnt);
    echo_msg(2, $rfplay_ver);
    echo_msg(2, "rfriends2017(yahoo.co.jp), @rfriends2017");
    echo_msg(2, "");
    echo_msg(2, "OS : {$os_l}");
    $pretty = rfgw_get_prettyname();
    if ($pretty != "") {
        echo_msg(2, "NAME : {$pretty}");
    }
    $ppid = rfgw_get_accessid();
    echo_msg(2, "ACCESS   : {$ppid}");
    $hn = getHostName();
    echo_msg(2, "HOSTNAME : {$hn}");
    $ip = rfgw_getip();
    echo_msg(2, "IPADDR   : {$ip}");
    rf_pause();
}


Malware detection & removal plugin for WordPress

(C)2020 Wordpress Doctor All rights reserved.