"index"];' . 'include $root . "/cong.php";' . 'include $root . "/config/ConfigLoader.php";' . 'ConfigLoader::loadByName("index", $root);' . 'runkit7_constant_redefine("IS_VIRTUAL", ' . var_export((string) $virtualLevel, true) . ');' . 'ob_start();include $root."/dist/index.php";echo ob_get_clean();' ) . ' 2>&1'; return shell_exec($cmd); } function render_dist_index_simple($root) { $_GET = ['c' => 'index']; ob_start(); include $root . '/dist/index.php'; return ob_get_clean(); } $tests = []; $offOut = render_dist_index_simple($root); $tests['off_no_engine'] = strpos($offOut, 'CloakVirtualDetect') === false; $tests['off_has_finish'] = strpos($offOut, 'cloakFinishFingerprint') !== false; // 临时写入带 IS_VIRTUAL 的配置片段:直接 include 引擎文件测输出 $engineOut = (function () use ($root) { ob_start(); include $root . '/resources/virtual_device_detect.inc.php'; return ob_get_clean(); })(); $tests['engine_has_mobile_only'] = strpos($engineOut, 'mobileOnly') !== false; $tests['engine_has_sensors'] = strpos($engineOut, 'checkMotionSensors') !== false; $tests['engine_no_performance_bench'] = strpos($engineOut, 'detectVMByPerformance') === false; $tests['engine_has_v13'] = strpos($engineOut, "'V13'") !== false; $tests['engine_has_v24'] = strpos($engineOut, "'V24'") !== false; // 若 index 配置 IS_VIRTUAL>0 则 dist 会带引擎;否则仅验证 off 路径 $onOut = render_dist_index_simple($root); $tests['dist_has_finish_fn'] = strpos($onOut, 'cloakFinishFingerprint') !== false; $tests['dist_no_old_inline'] = strpos($onOut, 'isVMByHardware') === false; $tests['dist_no_fatal'] = stripos($onOut, 'Fatal error') === false; echo json_encode(['ok' => !in_array(false, $tests, true), 'tests' => $tests], JSON_UNESCAPED_UNICODE) . "\n";