' . filesize($full) . ''; $mod = $full !== null ? gmdate('D, d M Y H:i:s', filemtime($full)) . ' GMT' : ''; return '' . htmlspecialchars($href) . '' . $size . '' . $mod . '' . ($isDir ? '' : '') . '' . 'HTTP/1.1 200 OK'; }; switch ($method) { case 'MKCOL': if (file_exists($file)) { http_response_code(405); exit; } if (!is_dir(dirname($file))) { http_response_code(409); exit; } mkdir($file, 0755); http_response_code(201); break; case 'PUT': if (!is_dir(dirname($file))) { http_response_code(409); exit; } $data = (string) file_get_contents('php://input'); if (file_exists($root . '/.truncate')) $data = substr($data, 0, (int) (strlen($data) / 2)); $existed = file_exists($file); file_put_contents($file, $data); http_response_code($existed ? 204 : 201); break; case 'DELETE': if (!file_exists($file)) { http_response_code(404); exit; } is_dir($file) ? @rmdir($file) : unlink($file); http_response_code(204); break; case 'HEAD': case 'GET': if (!is_file($file)) { http_response_code(404); exit; } header('Content-Length: ' . filesize($file)); if ($method === 'GET') readfile($file); break; case 'PROPFIND': if (!file_exists($file) && $rel !== '') { http_response_code(404); exit; } $xml = ''; $xml .= $entry($path, basename($rel), $rel === '' ? null : $file); if (is_dir($file) && ($_SERVER['HTTP_DEPTH'] ?? '1') !== '0') { foreach (scandir($file) ?: [] as $e) { if ($e === '.' || $e === '..' || $e[0] === '.') continue; $xml .= $entry(rtrim($path, '/') . '/' . rawurlencode($e), $e, $file . '/' . $e); } } $xml .= ''; http_response_code(207); header('Content-Type: application/xml; charset=utf-8'); echo $xml; break; default: http_response_code(405); }