예제 #1
0
 /**
  * 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;
 }