63 return new static(
false,
false,
$path,
$mime );
88 ': not enough parameters, must specify title and repo, or a full path' );
94 $this->name = basename(
$path );
108 $this->pageDims = [];
115 private function cachePageDimensions( $page = 1 ) {
121 if ( !isset( $this->pageDims[$page] ) ) {
125 if ( $this->
getHandler()->isMultiPage( $this ) ) {
126 $this->pageDims[$page] = $this->handler->getPageDimensions( $this, $page );
128 $info = $this->getSizeAndMetadata();
130 'width' => $info[
'width'],
131 'height' => $info[
'height']
136 return $this->pageDims[$page];
144 $dim = $this->cachePageDimensions( $page );
146 return $dim[
'width'] ?? 0;
154 $dim = $this->cachePageDimensions( $page );
156 return $dim[
'height'] ?? 0;
163 if ( !isset( $this->mime ) ) {
165 if ( $refPath !==
false ) {
166 $magic = MediaWikiServices::getInstance()->getMimeAnalyzer();
167 $this->mime = $magic->guessMimeType( $refPath );
180 $info = $this->getSizeAndMetadata();
181 return $info[
'bits'] ?? 0;
188 $info = $this->getSizeAndMetadata();
189 return $info[
'metadata'] ? serialize( $info[
'metadata'] ) :
false;
193 $info = $this->getSizeAndMetadata();
194 return $info[
'metadata'];
197 private function getSizeAndMetadata() {
198 if ( $this->sizeAndMetadata ===
null ) {
199 if ( !$this->getHandler() ) {
200 $this->sizeAndMetadata = [
'width' => 0,
'height' => 0,
'metadata' => [] ];
202 $this->sizeAndMetadata = $this->getHandler()->getSizeAndMetadataWithFallback(
203 $this, $this->getLocalRefPath() );
207 return $this->sizeAndMetadata;
215 return $this->repo->getZoneUrl(
'public' ) .
'/' .
216 $this->repo->getHashPath( $this->name ) . rawurlencode( $this->name );
226 $this->assertRepoDefined();
228 return $this->repo->getFileSize( $this->path );
240 $this->fsFile = $fsFile;
Class representing a non-directory file on the file system.
getRootDirectory()
Get the public zone root storage directory of the repository.
getNameFromTitle( $title)
Get the name of a file from its title.
getHashPath( $name)
Get a relative path including trailing slash, e.g.
Implements some public methods and some protected utility functions which are required by multiple ch...
static normalizeTitle( $title, $exception=false)
Given a string or Title object return either a valid Title object with namespace NS_FILE or null.
assertRepoDefined()
Assert that $this->repo is set to a valid FileRepo instance.
getLocalRefPath()
Get an FS copy or original of this file and return the path.
FileRepo LocalRepo ForeignAPIRepo false $repo
Some member variables can be lazy-initialised using __get().
getHandler()
Get a MediaHandler instance for this file.
string null $name
The name of a file from its title object.
File without associated database record.
array null $sizeAndMetadata
setLocalReference(FSFile $fsFile)
Optimize getLocalRefPath() by using an existing local reference.
array[] bool[] $pageDims
Dimension data.
__construct( $title=false, $repo=false, $path=false, $mime=false)
Create an UnregisteredLocalFile based on a path or a (title,repo) pair.
getMetadataArray()
Get the unserialized handler-specific metadata STUB.
static newFromPath( $path, $mime)
static newFromTitle( $title, $repo)