/** * Parses extension from file path. * It returns [[self::$extension]] is the last is set. * Otherwise the method tries to detect file mime type. * If mime type was not detected the method tries to parse file extension. * @param string $readFilePath path to file which extension must be parsed. * @return string|null parsed extension in local file system charset or null if extension is unknown. */ protected function parseFileExtension($readFilePath) { if ($this->extension !== null) { return $this->extension; } // try to determine mime type $mimeType = FileSystemHelper::getMimeType($readFilePath, null, true); if ($mimeType !== null) { $extensions = FileSystemHelper::getExtensionsByMimeType($mimeType, $this->mimeMagicFile); if (is_array($extensions) && count($extensions)) { return reset($extensions); } } // try to parse extension $decodedReadFilePath = FileSystemHelper::decodeFilename($readFilePath); if ($decodedReadFilePath === false) { return null; } $extension = FileSystemHelper::extension($decodedReadFilePath); if ($extension === null || $extension === '') { return $extension; } $fsExtension = FileSystemHelper::encodeFilename($extension); return $fsExtension === false ? null : $fsExtension; }