|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:----sOYfIexGTiqH64+Z5knpF/dUGBXH0pNcTPMwbpjkpFD7wJaciMLqucka1fBGMghmxGlAGwZgYX/E5583pgsd6na909NHYUgJDfxFEuArj/qQpeBgBzD1rZlzih3XyZOvi3oDZvnzp5MjJojocDDgxlNZh4E1HXNoslDQHr06FKsjO4DGquYbwYw1gu3nRbRG4iNYZC4cvqhKLbb0KAm4Dps7YB0qIdvcHaILIh2mGkfWE8c376uyPMfBhPoMHw4gPYOO6l8AdAZJ0qYCvg4okKjDvF7mEBjkNeJFrhQNsr1gbMuGdvV/HH0xDTQ7EbAUboh01OKeMlsLABl6UyX5rxblcCGWjWAuymTRioOZ6uqJZ5j+V7wjpG4xMcqLVQleovwnCLNZmwPRJHYKbzE9tztlzwCzGK594dWnk0Bz4eshfyuMqi38QLA7qp83FHUCeqZZ7xBG/8Qa3/r3qdJLg9DcLt++a8zwJWu1BCEmnRyh3ck2MgF7aFQPSQlHvOiiauWVwmeDU7McEPO3iQilnhFmBKOuzJ17olBiy8PzTX6sVoRDUdhO62/YwhwbEpvjxLJet319BtH7cT4iDd+8g1dvkFGWH2VB/nXncTe87He8Bl1XviaqLtJgWgJkdgjHdsc+iGukViMCTngFMQ8UHuRhFKTT/tcpgRrykfrZ25c=----ATTACHMENT:----NTIyOTM1MTgwODk5NDI2MSA5MTM2MDEzNjI3NTkwOTA3IDUxMzMxODM3OTI0NzU1NzE=