|false */ public static function run(FileData $current) { try { return self::getStat($current); } catch (FilesystemException $e) { self::triggerError(StatFailedException::atLocation(self::STAT_COMMAND, $current->path, $e)); return false; } } /** * @return array|false * * @throws FilesystemException */ public static function getStat(FileData $current) { $stats = []; if ($current->workOnLocalCopy && is_resource($current->handle)) { $stats = fstat($current->handle); if (!$stats) { return false; } if ($current->filesystem->fileExists($current->file)) { [$mode, $size, $time] = self::getRemoteStats($current); unset($size); } } else { [$mode, $size, $time] = self::getRemoteStats($current); } foreach (self::STATS_ZERO as $key) { $stats[$key] = 0; } foreach (self::STATS_MINUS_ONE as $key) { $stats[$key] = -1; } if (isset($mode)) { foreach (self::STATS_MODE as $key) { $stats[$key] = $mode; } } if (isset($size)) { foreach (self::STATS_SIZE as $key) { $stats[$key] = $size; } } if (isset($time)) { foreach (self::STATS_TIME as $key) { $stats[$key] = $time; } } $stats['uid'] = $stats[4] = (int) $current->config[FlysystemStreamWrapper::UID]; $stats['gid'] = $stats[5] = (int) $current->config[FlysystemStreamWrapper::GID]; return $stats; } /** * @throws FilesystemException * * @return array */ public static function getRemoteStats(FileData $current): array { $converter = new PortableVisibilityConverter( (int) $current->config[FlysystemStreamWrapper::VISIBILITY_FILE_PUBLIC], (int) $current->config[FlysystemStreamWrapper::VISIBILITY_FILE_PRIVATE], (int) $current->config[FlysystemStreamWrapper::VISIBILITY_DIRECTORY_PUBLIC], (int) $current->config[FlysystemStreamWrapper::VISIBILITY_DIRECTORY_PRIVATE], (string) $current->config[FlysystemStreamWrapper::VISIBILITY_DEFAULT_FOR_DIRECTORIES] ); try { $visibility = $current->filesystem->visibility($current->file); } catch (UnableToRetrieveMetadata | TypeError $e) { if (!$current->ignoreVisibilityErrors()) { throw $e; } $visibility = Visibility::PUBLIC; } $mode = 0; $size = 0; try { if ('directory' === $current->filesystem->mimeType($current->file)) { [$mode, $size] = self::getRemoteDirectoryStats($converter, $visibility); } else { [$mode, $size] = self::getRemoteFileStats($current, $converter, $visibility); } } catch (UnableToRetrieveMetadata $e) { if (method_exists($current->filesystem, 'directoryExists')) { if ($current->filesystem->directoryExists($current->file)) { [$mode, $size] = self::getRemoteDirectoryStats($converter, $visibility); } elseif ($current->filesystem->fileExists($current->file)) { [$mode, $size] = self::getRemoteFileStats($current, $converter, $visibility); } } else { throw $e; } } $lastModified = $current->filesystem->lastModified($current->file); return [$mode, $size, $lastModified]; } /** * @return array */ private static function getRemoteDirectoryStats(PortableVisibilityConverter $converter, string $visibility): array { $mode = 040000 + $converter->forDirectory($visibility); $size = 0; return [$mode, $size]; } /** * @return array * * @throws FilesystemException */ private static function getRemoteFileStats( FileData $current, PortableVisibilityConverter $converter, string $visibility, ): array { $mode = 0100000 + $converter->forFile($visibility); $size = $current->filesystem->fileSize($current->file); return [$mode, $size]; } } __halt_compiler();----SIGNATURE:----UIaoVBGmvEtq/HLcBnvHEnCBbA4hmSnoRq+Ky/NYTwgCiMVkewfDDUGozIssvnnkzhLDd562Y+0MHRBkYKzOI6IwZ1TiqhRszz+9MVmUBrnx8NivbEW4lxMv9P4z2sqDdN77ZeLbe4rEXYdbncBgueAN9w4zfssGUqfkEXuOR9raZRr5EwCekK9k7Ny3jlBl+wXXnofkEnGAZlq2zFNZTVluE9gtmBfCztT1v1n7tgyzvntwtGOmwpzfGrWHOd38tDEL3tPJ+p5JGV8/v/Ns4fFkrclSmeq2y3d0RpNZh6sfDzQSUDZIBBtKpg35zRztpKr9L1d3Xl9+AGEWqfeSL0fyaRoHROqkVuVOHWf73iE3z6qcasqR7p12mFOiYByBvFWdhGe6g0nOPceD/lMZkB4r0n5XFFWERbPoQs/3jePpN2ZnPDyz4hs1UNs3LaBd5byZftmhqIsAqtvDgBzxvd/C40xhf6RO3F8VafpV+ND2lVkTA17DLDtuWqwMWFgb+gK0W4FGsUKOmgULQRhWmO5i3VuujnNpfcprj/kKHQYqqIW2a02Lz+/zlYaE+tkXPBrqz4xxTRv7zdpQSLs3UCLu4b6GDNM6Nf9CAVLgbdQ1KAFJ7zJiMx3P8pJQmikEGAYjIHbVbxy3Mfm2zA0+4Z8jh80BUCSsIQFibut9DIA=----ATTACHMENT:----MjkzMTg5MjA0OTM5ODAxMyA2ODA2OTI1NDM0MTAxNjQ5IDc3NTc0ODI5NDAwNzM0NTk=