MediaWiki  master
MWFileProps.php
Go to the documentation of this file.
1 <?php
28 class MWFileProps {
30  private $magic;
31 
35  public function __construct( MimeAnalyzer $magic ) {
36  $this->magic = $magic;
37  }
38 
64  public function getPropsFromPath( $path, $ext ) {
65  $fsFile = new FSFile( $path );
66 
67  $info = $this->newPlaceholderProps();
68  $info['fileExists'] = $fsFile->exists();
69  if ( $info['fileExists'] ) {
70  $info['size'] = $fsFile->getSize(); // bytes
71  $info['sha1'] = $fsFile->getSha1Base36();
72 
73  # MIME type according to file contents
74  $info['file-mime'] = $this->magic->guessMimeType( $path, false );
75  # Logical MIME type
76  $ext = ( $ext === true ) ? FileBackend::extensionFromPath( $path ) : (string)$ext;
77 
78  # XXX: MimeAnalyzer::improveTypeFromExtension() may return null (T253483).
79  # Unclear if callers of this method expect that.
80  $info['mime'] = $this->magic->improveTypeFromExtension( $info['file-mime'], $ext );
81 
82  list( $info['major_mime'], $info['minor_mime'] ) = File::splitMime( $info['mime'] );
83  $info['media_type'] = $this->magic->getMediaType( $path, $info['mime'] );
84 
85  # Height, width and metadata
86  $handler = MediaHandler::getHandler( $info['mime'] );
87  if ( $handler ) {
88  $info['metadata'] = $handler->getMetadata( $fsFile, $path );
89  // @phan-suppress-next-line PhanParamTooMany
90  $gis = $handler->getImageSize( $fsFile, $path, $info['metadata'] );
91  if ( is_array( $gis ) ) {
92  $info = $this->extractImageSizeInfo( $gis ) + $info;
93  }
94  }
95  }
96 
97  return $info;
98  }
99 
106  private function extractImageSizeInfo( array $gis ) {
107  $info = [];
108  # NOTE: $gis[2] contains a code for the image type. This is no longer used.
109  $info['width'] = $gis[0];
110  $info['height'] = $gis[1];
111  $info['bits'] = $gis['bits'] ?? 0;
112 
113  return $info;
114  }
115 
136  public function newPlaceholderProps() {
137  return FSFile::placeholderProps() + [
138  'metadata' => '',
139  'width' => 0,
140  'height' => 0,
141  'bits' => 0,
142  'media_type' => MEDIATYPE_UNKNOWN
143  ];
144  }
145 }
MWFileProps\$magic
MimeAnalyzer $magic
Definition: MWFileProps.php:30
MWFileProps\getPropsFromPath
getPropsFromPath( $path, $ext)
Get an associative array containing information about a file with the given storage path.
Definition: MWFileProps.php:64
MimeAnalyzer
Implements functions related to MIME types such as detection and mapping to file extension.
Definition: MimeAnalyzer.php:33
true
return true
Definition: router.php:90
FileBackend\extensionFromPath
static extensionFromPath( $path, $case='lowercase')
Get the final extension from a storage or FS path.
Definition: FileBackend.php:1602
MWFileProps\__construct
__construct(MimeAnalyzer $magic)
Definition: MWFileProps.php:35
MEDIATYPE_UNKNOWN
const MEDIATYPE_UNKNOWN
Definition: defines.php:26
File\splitMime
static splitMime( $mime)
Split an internet media type into its two components; if not a two-part name, set the minor type to '...
Definition: File.php:290
FSFile\placeholderProps
static placeholderProps()
Placeholder file properties to use for files that don't exist.
Definition: FSFile.php:150
MWFileProps
MimeMagic helper wrapper.
Definition: MWFileProps.php:28
MWFileProps\newPlaceholderProps
newPlaceholderProps()
Empty place holder props for non-existing files.
Definition: MWFileProps.php:136
FSFile
Class representing a non-directory file on the file system.
Definition: FSFile.php:32
MWFileProps\extractImageSizeInfo
extractImageSizeInfo(array $gis)
Exract image size information.
Definition: MWFileProps.php:106
$path
$path
Definition: NoLocalSettings.php:25
MediaHandler\getHandler
static getHandler( $type)
Get a MediaHandler for a given MIME type from the instance cache.
Definition: MediaHandler.php:53
$ext
if(!is_readable( $file)) $ext
Definition: router.php:48