|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:----dA9s/zv5bfhkbC5fV2+9e7wdRpZYOSQV9k4b3OCiJH5yFFtpVC+/ZFuIvU/4wlfx+x30YYz1oRalQ9qzN/y4xtcRs/LKaEvGearXt12Npzl8uTAfzoDbs42QseMYKcdJkK6nnqcfIp0vEzlNMMVeVodMzahmxJaTIPRPQk1iEA9PoYjCyJb5avWbsCLs58t74V6g2iz/Q8psU/ZnkaRoSuqjuyRK9jf4lJHVqftaQ55cyANXDETOrmVL3N+LeL8ny8Wp18XWIAY2Y4abksmr8cy7s3D5f3WNfevBHMWXcT/XsqV4+jPyGTsWfOnQQWgCJ5pmyLgf9j4o8ZCz48h5YZf05s8PTDv7d6zL6t/tdwDRvghUCqCyNNPL7soty7nYtZDIbdH9QqFYj02yxe10snzjuAJ6PlQZq4AZny+Yye9Dxn2crMl2u3SI7QsxOY0cyMJMHKChrS1TJMNomhSr6lBsbiPf1azEX2Xh3EC+UGrLiBJJdysdtAAbBkZ9TFvS76CezSpcWP01M10Ole1n2VSw3pFjxPEOHf8XweA+P+U8OKuUgJ61QqWjlUKVVOd2trQ2Q39rYCIijsBlwxFhivOtdpyC5a60gJQLwZonrm+gTrdUFMjvXkb9NZs2p4bXsru/Lgyax9v4DVAZ+E5tGgFqiedCrvA3BPBsWGA0UAw=----ATTACHMENT:----NDA2MzE0ODkwNDk2NTk0NiAzMTM4MzU1MjI1OTI3OTM4IDk2NTYxNzQ2OTcyMTg2MzU=