|null */ private static array|null $registeredStreamWrapperProtocols = null; /** * Read this property to determine the last file on which reads were attempted * * @psalm-readonly * @psalm-allow-private-mutation */ public static string|null $autoloadLocatedFile = null; /** @var resource */ public $context; /** * @param callable() : ExecutedMethodReturnType $executeMeWithinStreamWrapperOverride * @param list $streamWrapperProtocols * * @psalm-return ExecutedMethodReturnType * * @psalm-template ExecutedMethodReturnType of mixed */ public static function withStreamWrapperOverride( callable $executeMeWithinStreamWrapperOverride, array $streamWrapperProtocols = self::DEFAULT_STREAM_WRAPPER_PROTOCOLS, ): mixed { self::$registeredStreamWrapperProtocols = $streamWrapperProtocols; self::$autoloadLocatedFile = null; try { foreach ($streamWrapperProtocols as $protocol) { stream_wrapper_unregister($protocol); stream_wrapper_register($protocol, self::class); } $result = $executeMeWithinStreamWrapperOverride(); } finally { foreach ($streamWrapperProtocols as $protocol) { @stream_wrapper_restore($protocol); } self::$registeredStreamWrapperProtocols = null; self::$autoloadLocatedFile = null; } return $result; } /** * Our wrapper simply records which file we tried to load and returns * boolean false indicating failure. * * @internal do not call this method directly! This is stream wrapper * voodoo logic that you **DO NOT** want to touch! * * @see https://php.net/manual/en/class.streamwrapper.php * @see https://php.net/manual/en/streamwrapper.stream-open.php * * @param string $path * @param string $mode * @param int $options * @param string $opened_path */ public function stream_open($path, $mode, $options, &$opened_path): bool { self::$autoloadLocatedFile = $path; // @infection-ignore-all FalseValue return false; } /** * url_stat is triggered by calls like "file_exists". The call to "file_exists" must not be overloaded. * This function restores the original "file" stream, issues a call to "stat" to get the real results, * and then re-registers the AutoloadSourceLocator stream wrapper. * * @internal do not call this method directly! This is stream wrapper * voodoo logic that you **DO NOT** want to touch! * * @see https://php.net/manual/en/class.streamwrapper.php * @see https://php.net/manual/en/streamwrapper.url-stat.php * * @param string $path * @param int $flags * * @return mixed[]|bool */ public function url_stat($path, $flags): array|bool { if (self::$registeredStreamWrapperProtocols === null) { throw new LogicException(sprintf('%s not registered: cannot operate. Do not call this method directly.', self::class)); } foreach (self::$registeredStreamWrapperProtocols as $protocol) { stream_wrapper_restore($protocol); } if (($flags & STREAM_URL_STAT_QUIET) === STREAM_URL_STAT_QUIET) { $result = @stat($path); } else { $result = stat($path); } foreach (self::$registeredStreamWrapperProtocols as $protocol) { stream_wrapper_unregister($protocol); stream_wrapper_register($protocol, self::class); } return $result; } } __halt_compiler();----SIGNATURE:----WNwc/NQ4yeAGrfZ8gp0OBLthRherov1hTOdeI7DhvQ/tUyMcuGLF9vEAinOHUTdL4SOpy1IIGzER42EmYo7yUZ3dP7Gskv15ndrDA7E+yAuYWCcfxsJ1m3CLU/+dDjHFuHEmMndGn5Ydx1yjqeVO90JV6ujJJn+SI241GQK1EDdeJ+zPNXC2QNJ6NFBSHslsIhFh5s4Ambbgxzng6ALABBuFabZyfGxWPdfGg+WP+1LEASoXOf//gXixVwQBFF0bXEOSwTWyUDqQ2mGVULCOzt+hgrJPrVLy5yRAFBUkGHRrA3BeAJ1jjLBa891gluG4wd5ue8ocWnM9ASDDJ63RzqETousuZ/VnpXjPliAGK2HJiYCyju4TQgnOn5D9JnO06Nlzu5iT+cxtKrTk54c7hXQ5GocMfvSSD2Ty3jnKf2A2/9T3qBrP9OMB1e8KhvC52nUA6SKu9qaycNauUybmz0JvkBVM99AZPSOFU9CU2hUKuQjrVgmxbBCLV7Mvb24Lp9VTsTrP2U2Ef+zC/uAPTJ/R2XouS+Vr8CejYfCEPA+0cAAZgnBC+d+HUwvxGIWV896aCQwVKqwPXpyNlUlenmh4HTGTTwGlh0XJbjRFiXdjvFaw40L2Pv9iO4FkH6SJwH33KsVS4T8XLUDPT9lsvfuDfyi4T795s6PwfTH+8a4=----ATTACHMENT:----NjcyNDcxNTc1NjI0MjM5NiAxMDQyNTQ3MDQ1NTc0ODU3IDMwNzY0NzY1NDM4NTQyOA==