<?php
// Writes only random reserved keys and removes only those same keys. Never FLUSHDB/FLUSHALL.
if(PHP_VERSION!=='7.3.32'||!extension_loaded('redis')){fwrite(STDERR,"Unexpected PHP runtime\n");exit(2);}
$r=new Redis();$r->connect('127.0.0.1',6379,3);$info=$r->info('server');
if(($info['redis_version']??'')!=='6.2.7'){fwrite(STDERR,"Unexpected Redis version; stop before writes\n");exit(2);}
if(($info['config_file']??'')!=='/opt/zhct-redis627/etc/redis.conf'){fwrite(STDERR,"Unexpected Redis config_file; stop before writes\n");exit(2);}
$key='__zhct_installcheck:'.bin2hex(random_bytes(12));$ok=false;
try{
 if(!$r->select(8))throw new RuntimeException('DB8 select failed');if($r->setex($key,60,'中文菜牌𠮷😀')!==true)throw new RuntimeException('DB8 write failed');if($r->get($key)!=='中文菜牌𠮷😀')throw new RuntimeException('UTF8 read mismatch');
 $ttl=$r->ttl($key);if($ttl<1||$ttl>60)throw new RuntimeException('TTL mismatch');
 if(!$r->select(9))throw new RuntimeException('DB9 select failed');if($r->exists($key))throw new RuntimeException('DB8/9 not isolated');if($r->setex($key,60,'second-front')!==true)throw new RuntimeException('DB9 write failed');if($r->get($key)!=='second-front')throw new RuntimeException('DB9 read mismatch');$ttl9=$r->ttl($key);if($ttl9<1||$ttl9>60)throw new RuntimeException('DB9 TTL mismatch');
 if(!$r->select(8))throw new RuntimeException('DB8 reselect failed');if($r->get($key)!=='中文菜牌𠮷😀')throw new RuntimeException('DB isolation mismatch');$ok=true;
}finally{foreach([8,9]as$db){$r->select($db);$r->del($key);}$r->close();}
echo json_encode(['passed'=>$ok,'redis_server'=>'6.2.7','php_redis_extension'=>phpversion('redis'),'databases_checked'=>[8,9],'unicode'=>true,'ttl'=>true,'own_test_keys_removed'=>true],JSON_UNESCAPED_UNICODE),"\n";
