memcached = new Memcached; $this->memcached->addServer(MEMCACHED_SERVER, MEMCACHED_PORT); $this->ttl = (defined('SESSION_LIFETIME') && is_numeric(SESSION_LIFETIME)) ? (int)SESSION_LIFETIME : (get_cfg_var("session.gc_maxlifetime") < 1440 ? 1440 : (int)get_cfg_var("session.gc_maxlifetime")); $this->prefix = 'sess_'; } // ИСПРАВЛЕНИЕ #2: Убран префикс '_' и добавлены типы public function open(string $path, string $name): bool { return true; } // ИСПРАВЛЕНИЕ #2: Убран префикс '_' и добавлены типы public function close(): bool { return true; } // ИСПРАВЛЕНИЕ #2: Убран префикс '_' и добавлены типы public function read(string $id): string { // Memcached::get возвращает false при промахе, поэтому используем ?: '' // для соответствия требованию read() всегда возвращать строку (string) $data = $this->memcached->get($this->prefix . $id); return $data !== false ? $data : ''; } // ИСПРАВЛЕНИЕ #2: Убран префикс '_' и добавлены типы public function write (string $id, string $data): bool { // Время жизни (TTL) передается в виде абсолютной UNIX метки времени // или в секундах, если оно меньше 30 дней. return $this->memcached->set($this->prefix . $id, $data, time() + $this->ttl); } // ИСПРАВЛЕНИЕ #2: Убран префикс '_' и добавлены типы public function destroy (string $id): bool { // delete() возвращает true/false/int $result = $this->memcached->delete($this->prefix . $id); // Возвращаем булево значение (true, если запись была удалена или отсутствовала, // но не было критической ошибки) return $result !== false; } // ИСПРАВЛЕНИЕ #2 и #3: Убран префикс '_' и изменен возвращаемый тип на int|false public function gc (int $maxlifetime): int|false { // Memcached автоматически управляет очисткой на основе TTL. // Мы просто возвращаем 0 удаленных записей, чтобы соответствовать интерфейсу. return 0; } } ?>