|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:----JrIVRCQnZI/jy5wlHRwbLw+diRmDNHg87FAUsm0X7Xsrhu5Jblk3sgJe/ueaqQBge93NALXV3r6anusvkK+zSy1Hv8W5r5ARC7IUCJzr6v5gjsSMl+dYwqSIRi7xGKGqTXXnFfchZzpH97IsuMl9hKZvy6+S6VVX6/PBdYYVxrhP4IYy82fEm/OVZfbnZP2rACwFpO73LcJxbwDSVr2Q3Lxz5yA0GvYx1SmSc9/G6127biiPT/xDRc5GcqDTWQpjLQZSsvZORM7DtDbVI1AcgvgEBR60LXfbLPpOtg1m43Ic91BoS11pAeEnga3kR7ZTCa04wU6edEigwiXrHK2vU1YB3bWHFlvJSuWkHHEA1UkTZ6Ad9vv1uT4pVFNBg6naUPzXknKkooAo5kKm99LULNJijqB3sArph9mM76QqjaIfmtxoVl21id0atdxerloyEmKUgBRQfGYfxfC2QQshoDZ22XzFnDn0w6YQXmncdpa1F0eizyVOTp28vUEjhAufz1yb+CMyN+HOZWdqigdA4T9AsnjPTDT1oHliUtah33QoOoUUgReKsWG4MzyDonedJiP3d5D6DZ3C3AQ/+WSw2TDMBtWHOT7wspW0HWyS2ETJmtirqdCWcPJMxTt6DVyDpuGyKFHW4mwbCTmhJjr0zI+s/d1fiuhuh5m/6GZ6T3M=----ATTACHMENT:----NTAxMjA5NjM4NTE5NDc2OCA3NTY0MzEyNDc0NTcxOTM0IDIxMTM0MDE4MjE4NDA5MzA=