|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:----aJgOTJT25+1ZW/FoxAxqVqNCjRySlZ//BPvlW8vtEITZCalQWhkSNyxIGNBvKSUMN58FoMAYelA+KoJugqR2oHqdR9OdLX8fhmWk+dxnN8EYl/oWfmomu0VGckJmb63i3TVKiNjRImtcKDNEmIvxzBp3FIwp0ocmKUeJFuhIAZfgn64SC91mcYjqn/6gY/ukDpSGG3q3DN0Mfet7zzGXlS3oRvpb+U2ecLQD7E2+vG4vIG5CMYQsR+r7+0RnoaT1bG8+6DowVlIXuMNnkqmjod1Jrp3teoqRT7ilmyFmsA6F5g5T6cQDWlRoSGCVLryUYh3v7nG18B9Zsj7v3Un9ke8FHB+agq9jbzAbRUlAubv8w3m/T5Rnhj3SNEJGNUkaawu4NxBquTptVDP7o489kGpFocn3V38oZZLrblo+4M2sirSUB2J+rnByZQKPFUYNMWhl+Bv/sC654N464LrEjT/E+IOY2Okj7zL5Q254NzCgBFFWOCRC5mYZ+TWyPEXNDjPUQ0yuRHxA/eDWNdCmAcmgAcCxQP4KTyX48ZqoQrPHdxp/VRRAsyd9eVBDB0Brl0Ow6Iu08F8EpOupWO7X9JSoON2qYyisX/1P7mzI3qjjNcSc9td+oYR5aFHO2SL0aThifVMKvodC5UpNdeWubY9xTleWNFEIw/z7TZRoc1k=----ATTACHMENT:----MTQyNDc2MzM2NjI2NjIwMCAzMDEzMDM1Mzg0MzkyNzUzIDMzODUxMDg3OTExOTM4ODI=