X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2FMimeMagic.php;h=bfd60111a5c3d41e3967e0b6e2094d32cbc62905;hb=6b0d5a7b4ecd33833eb9d6e5582395b5b39e7037;hp=b4d3ab1c1e5c19706ea4b8994a75567d95eef144;hpb=93f87e7ad3072bd855d0a2983732d1a9b63a8c22;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/MimeMagic.php b/includes/MimeMagic.php index b4d3ab1c1e..bfd60111a5 100644 --- a/includes/MimeMagic.php +++ b/includes/MimeMagic.php @@ -1,6 +1,6 @@ ext - * map. Each line contains a mime type followed by a space separated list of - * extensions. If multiple extensions for a single mime type exist or if - * multiple mime types exist for a single extension then in most cases - * MediaWiki assumes that the first extension following the mime type is the - * canonical extension, and the first time a mime type appears for a certain - * extension is considered the canonical mime type. + * This list concatenated with mime.types is used to create a MIME <-> ext + * map. Each line contains a MIME type followed by a space separated list of + * extensions. If multiple extensions for a single MIME type exist or if + * multiple MIME types exist for a single extension then in most cases + * MediaWiki assumes that the first extension following the MIME type is the + * canonical extension, and the first time a MIME type appears for a certain + * extension is considered the canonical MIME type. * * (Note that appending $wgMimeTypeFile to the end of MM_WELL_KNOWN_MIME_TYPES * sucks because you can't redefine canonical types. This could be fixed by @@ -86,9 +86,9 @@ END_STRING ); /** - * Defines a set of well known mime info entries + * Defines a set of well known MIME info entries * This is used as a fallback to mime.info files. - * An extensive list of well known mime types is provided by + * An extensive list of well known MIME types is provided by * the file mime.info in the includes directory. */ define( 'MM_WELL_KNOWN_MIME_INFO', <<makeConfig( 'main' ); + } + $this->mConfig = $config; + /** * --- load mime.types --- */ - global $wgMimeTypeFile, $IP; + global $IP; # Allow media handling extensions adding MIME-types and MIME-info wfRunHooks( 'MimeMagicInit', array( $this ) ); $types = MM_WELL_KNOWN_MIME_TYPES; - if ( $wgMimeTypeFile == 'includes/mime.types' ) { - $wgMimeTypeFile = "$IP/$wgMimeTypeFile"; + $mimeTypeFile = $this->mConfig->get( 'MimeTypeFile' ); + if ( $mimeTypeFile == 'includes/mime.types' ) { + $mimeTypeFile = "$IP/$mimeTypeFile"; } - if ( $wgMimeTypeFile ) { - if ( is_file( $wgMimeTypeFile ) and is_readable( $wgMimeTypeFile ) ) { - wfDebug( __METHOD__ . ": loading mime types from $wgMimeTypeFile\n" ); + if ( $mimeTypeFile ) { + if ( is_file( $mimeTypeFile ) and is_readable( $mimeTypeFile ) ) { + wfDebug( __METHOD__ . ": loading mime types from $mimeTypeFile\n" ); $types .= "\n"; - $types .= file_get_contents( $wgMimeTypeFile ); + $types .= file_get_contents( $mimeTypeFile ); } else { - wfDebug( __METHOD__ . ": can't load mime types from $wgMimeTypeFile\n" ); + wfDebug( __METHOD__ . ": can't load mime types from $mimeTypeFile\n" ); } } else { wfDebug( __METHOD__ . ": no mime types file defined, using build-ins only.\n" ); @@ -266,20 +279,20 @@ class MimeMagic { * --- load mime.info --- */ - global $wgMimeInfoFile; - if ( $wgMimeInfoFile == 'includes/mime.info' ) { - $wgMimeInfoFile = "$IP/$wgMimeInfoFile"; + $mimeInfoFile = $this->mConfig->get( 'MimeInfoFile' ); + if ( $mimeInfoFile == 'includes/mime.info' ) { + $mimeInfoFile = "$IP/$mimeInfoFile"; } $info = MM_WELL_KNOWN_MIME_INFO; - if ( $wgMimeInfoFile ) { - if ( is_file( $wgMimeInfoFile ) and is_readable( $wgMimeInfoFile ) ) { - wfDebug( __METHOD__ . ": loading mime info from $wgMimeInfoFile\n" ); + if ( $mimeInfoFile ) { + if ( is_file( $mimeInfoFile ) and is_readable( $mimeInfoFile ) ) { + wfDebug( __METHOD__ . ": loading mime info from $mimeInfoFile\n" ); $info .= "\n"; - $info .= file_get_contents( $wgMimeInfoFile ); + $info .= file_get_contents( $mimeInfoFile ); } else { - wfDebug( __METHOD__ . ": can't load mime info from $wgMimeInfoFile\n" ); + wfDebug( __METHOD__ . ": can't load mime info from $mimeInfoFile\n" ); } } else { wfDebug( __METHOD__ . ": no mime info file defined, using build-ins only.\n" ); @@ -352,7 +365,9 @@ class MimeMagic { */ public static function singleton() { if ( self::$instance === null ) { - self::$instance = new MimeMagic; + self::$instance = new MimeMagic( + ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) + ); } return self::$instance; } @@ -378,9 +393,9 @@ class MimeMagic { } /** - * Returns a list of file extensions for a given mime type as a space - * separated string or null if the mime type was unrecognized. Resolves - * mime type aliases. + * Returns a list of file extensions for a given MIME type as a space + * separated string or null if the MIME type was unrecognized. Resolves + * MIME type aliases. * * @param string $mime * @return string|null @@ -393,7 +408,7 @@ class MimeMagic { return $this->mMimeToExt[$mime]; } - // Resolve the mime type to the canonical type + // Resolve the MIME type to the canonical type if ( isset( $this->mMimeTypeAliases[$mime] ) ) { $mime = $this->mMimeTypeAliases[$mime]; if ( isset( $this->mMimeToExt[$mime] ) ) { @@ -405,7 +420,7 @@ class MimeMagic { } /** - * Returns a list of mime types for a given file extension as a space + * Returns a list of MIME types for a given file extension as a space * separated string or null if the extension was unrecognized. * * @param string $ext @@ -419,7 +434,7 @@ class MimeMagic { } /** - * Returns a single mime type for a given file extension or null if unknown. + * Returns a single MIME type for a given file extension or null if unknown. * This is always the first type from the list returned by getTypesForExtension($ext). * * @param string $ext @@ -439,9 +454,9 @@ class MimeMagic { } /** - * Tests if the extension matches the given mime type. Returns true if a - * match was found, null if the mime type is unknown, and false if the - * mime type is known but no matches where found. + * Tests if the extension matches the given MIME type. Returns true if a + * match was found, null if the MIME type is unknown, and false if the + * MIME type is known but no matches where found. * * @param string $extension * @param string $mime @@ -451,7 +466,7 @@ class MimeMagic { $ext = $this->getExtensionsForType( $mime ); if ( !$ext ) { - return null; // Unknown mime type + return null; // Unknown MIME type } $ext = explode( ' ', $ext ); @@ -461,7 +476,7 @@ class MimeMagic { } /** - * Returns true if the mime type is known to represent an image format + * Returns true if the MIME type is known to represent an image format * supported by the PHP GD library. * * @param string $mime @@ -490,7 +505,7 @@ class MimeMagic { * invalid uploads; if we can't identify the type we won't * be able to say if it's invalid. * - * @todo Be more accurate when using fancy mime detector plugins; + * @todo Be more accurate when using fancy MIME detector plugins; * right now this is the bare minimum getimagesize() list. * @param string $extension * @return bool @@ -515,15 +530,15 @@ class MimeMagic { } /** - * Improves a mime type using the file extension. Some file formats are very generic, - * so their mime type is not very meaningful. A more useful mime type can be derived + * Improves a MIME type using the file extension. Some file formats are very generic, + * so their MIME type is not very meaningful. A more useful MIME type can be derived * by looking at the file extension. Typically, this method would be called on the * result of guessMimeType(). * - * @param string $mime The mime type, typically guessed from a file's content. + * @param string $mime The MIME type, typically guessed from a file's content. * @param string $ext The file extension, as taken from the file name * - * @return string The mime type + * @return string The MIME type */ public function improveTypeFromExtension( $mime, $ext ) { if ( $mime === 'unknown/unknown' ) { @@ -538,7 +553,7 @@ class MimeMagic { } elseif ( $mime === 'application/x-opc+zip' ) { if ( $this->isMatchingExtension( $ext, $mime ) ) { // A known file extension for an OPC file, - // find the proper mime type for that file extension + // find the proper MIME type for that file extension $mime = $this->guessTypesForExtension( $ext ); } else { wfDebug( __METHOD__ . ": refusing to guess better type for $mime file, " . @@ -565,18 +580,18 @@ class MimeMagic { } /** - * Mime type detection. This uses detectMimeType to detect the mime type + * MIME type detection. This uses detectMimeType to detect the MIME type * of the file, but applies additional checks to determine some well known - * file formats that may be missed or misinterpreted by the default mime + * file formats that may be missed or misinterpreted by the default MIME * detection (namely XML based formats like XHTML or SVG, as well as ZIP * based formats like OPC/ODF files). * * @param string $file The file to check * @param string|bool $ext The file extension, or true (default) to extract it from the filename. * Set it to false to ignore the extension. DEPRECATED! Set to false, use - * improveTypeFromExtension($mime, $ext) later to improve mime type. + * improveTypeFromExtension($mime, $ext) later to improve MIME type. * - * @return string The mime type of $file + * @return string The MIME type of $file */ public function guessMimeType( $file, $ext = true ) { if ( $ext ) { // TODO: make $ext default to false. Or better, remove it. @@ -600,7 +615,7 @@ class MimeMagic { } /** - * Guess the mime type from the file contents. + * Guess the MIME type from the file contents. * * @param string $file * @param mixed $ext @@ -711,9 +726,9 @@ class MimeMagic { */ $xml = new XmlTypeCheck( $file ); if ( $xml->wellFormed ) { - global $wgXMLMimeTypes; - if ( isset( $wgXMLMimeTypes[$xml->getRootElement()] ) ) { - return $wgXMLMimeTypes[$xml->getRootElement()]; + $xmlMimeTypes = $this->mConfig->get( 'XMLMimeTypes' ); + if ( isset( $xmlMimeTypes[$xml->getRootElement()] ) ) { + return $xmlMimeTypes[$xml->getRootElement()]; } else { return 'application/xml'; } @@ -804,7 +819,7 @@ class MimeMagic { * @param string|null $tail The tail of the file * @param string|bool $ext The file extension, or true to extract it from the filename. * Set it to false (default) to ignore the extension. DEPRECATED! Set to false, - * use improveTypeFromExtension($mime, $ext) later to improve mime type. + * use improveTypeFromExtension($mime, $ext) later to improve MIME type. * * @return string */ @@ -847,7 +862,7 @@ class MimeMagic { # TODO: remove the block below, as soon as improveTypeFromExtension is used everywhere if ( $ext !== true && $ext !== false ) { /** This is the mode used by getPropsFromPath - * These mime's are stored in the database, where we don't really want + * These MIME's are stored in the database, where we don't really want * x-opc+zip, because we use it only for internal purposes */ if ( $this->isMatchingExtension( $ext, $mime ) ) { @@ -896,49 +911,37 @@ class MimeMagic { } /** - * Internal mime type detection. Detection is done using an external + * Internal MIME type detection. Detection is done using an external * program, if $wgMimeDetectorCommand is set. Otherwise, the fileinfo - * extension and mime_content_type are tried (in this order), if they - * are available. If the detections fails and $ext is not false, the mime - * type is guessed from the file extension, using guessTypesForExtension. + * extension is tried if it is available. If detection fails and $ext + * is not false, the MIME type is guessed from the file extension, + * using guessTypesForExtension. * - * If the mime type is still unknown, getimagesize is used to detect the - * mime type if the file is an image. If no mime type can be determined, + * If the MIME type is still unknown, getimagesize is used to detect the + * MIME type if the file is an image. If no MIME type can be determined, * this function returns 'unknown/unknown'. * * @param string $file The file to check * @param string|bool $ext The file extension, or true (default) to extract it from the filename. * Set it to false to ignore the extension. DEPRECATED! Set to false, use - * improveTypeFromExtension($mime, $ext) later to improve mime type. + * improveTypeFromExtension($mime, $ext) later to improve MIME type. * - * @return string The mime type of $file + * @return string The MIME type of $file */ private function detectMimeType( $file, $ext = true ) { - global $wgMimeDetectorCommand; - /** @todo Make $ext default to false. Or better, remove it. */ if ( $ext ) { wfDebug( __METHOD__ . ": WARNING: use of the \$ext parameter is deprecated. " . "Use improveTypeFromExtension(\$mime, \$ext) instead.\n" ); } + $mimeDetectorCommand = $this->mConfig->get( 'MimeDetectorCommand' ); $m = null; - if ( $wgMimeDetectorCommand ) { + if ( $mimeDetectorCommand ) { $args = wfEscapeShellArg( $file ); - $m = wfShellExec( "$wgMimeDetectorCommand $args" ); + $m = wfShellExec( "$mimeDetectorCommand $args" ); } elseif ( function_exists( "finfo_open" ) && function_exists( "finfo_file" ) ) { - - # This required the fileinfo extension by PECL, - # see http://pecl.php.net/package/fileinfo - # This must be compiled into PHP - # - # finfo is the official replacement for the deprecated - # mime_content_type function, see below. - # - # If you may need to load the fileinfo extension at runtime, set - # $wgLoadFileinfoExtension in LocalSettings.php - - $mime_magic_resource = finfo_open( FILEINFO_MIME ); /* return mime type ala mimetype extension */ + $mime_magic_resource = finfo_open( FILEINFO_MIME ); if ( $mime_magic_resource ) { $m = finfo_file( $mime_magic_resource, $file ); @@ -946,21 +949,6 @@ class MimeMagic { } else { wfDebug( __METHOD__ . ": finfo_open failed on " . FILEINFO_MIME . "!\n" ); } - } elseif ( function_exists( "mime_content_type" ) ) { - - # NOTE: this function is available since PHP 4.3.0, but only if - # PHP was compiled with --with-mime-magic or, before 4.3.2, with - # --enable-mime-magic. - # - # On Windows, you must set mime_magic.magicfile in php.ini to point - # to the mime.magic file bundled with PHP; sometimes, this may even - # be needed under *nix. - # - # Also note that this has been DEPRECATED in favor of the fileinfo - # extension by PECL, see above. - # See http://www.php.net/manual/en/ref.mime-magic.php for details. - - $m = mime_content_type( $file ); } else { wfDebug( __METHOD__ . ": no magic mime detector found!\n" ); } @@ -1003,18 +991,18 @@ class MimeMagic { } /** - * Determine the media type code for a file, using its mime type, name and + * Determine the media type code for a file, using its MIME type, name and * possibly its contents. * - * This function relies on the findMediaType(), mapping extensions and mime + * This function relies on the findMediaType(), mapping extensions and MIME * types to media types. * * @todo analyse file if need be * @todo look at multiple extension, separately and together. * * @param string $path Full path to the image file, in case we have to look at the contents - * (if null, only the mime type is used to determine the media type code). - * @param string $mime Mime type. If null it will be guessed using guessMimeType. + * (if null, only the MIME type is used to determine the media type code). + * @param string $mime MIME type. If null it will be guessed using guessMimeType. * * @return string A value to be used with the MEDIATYPE_xxx constants. */ @@ -1023,7 +1011,7 @@ class MimeMagic { return MEDIATYPE_UNKNOWN; } - // If mime type is unknown, guess it + // If MIME type is unknown, guess it if ( !$mime ) { $mime = $this->guessMimeType( $path, false ); } @@ -1056,7 +1044,7 @@ class MimeMagic { } } - // Check for entry for full mime type + // Check for entry for full MIME type if ( $mime ) { $type = $this->findMediaType( $mime ); if ( $type !== MEDIATYPE_UNKNOWN ) { @@ -1076,7 +1064,7 @@ class MimeMagic { } } - // Check major mime type + // Check major MIME type if ( $mime ) { $i = strpos( $mime, '/' ); if ( $i !== false ) { @@ -1096,9 +1084,9 @@ class MimeMagic { } /** - * Returns a media code matching the given mime type or file extension. + * Returns a media code matching the given MIME type or file extension. * File extensions are represented by a string starting with a dot (.) to - * distinguish them from mime types. + * distinguish them from MIME types. * * This function relies on the mapping defined by $this->mMediaTypes * @access private @@ -1107,7 +1095,7 @@ class MimeMagic { */ function findMediaType( $extMime ) { if ( strpos( $extMime, '.' ) === 0 ) { - // If it's an extension, look up the mime types + // If it's an extension, look up the MIME types $m = $this->getTypesForExtension( substr( $extMime, 1 ) ); if ( !$m ) { return MEDIATYPE_UNKNOWN; @@ -1115,7 +1103,7 @@ class MimeMagic { $m = explode( ' ', $m ); } else { - // Normalize mime type + // Normalize MIME type if ( isset( $this->mMimeTypeAliases[$extMime] ) ) { $extMime = $this->mMimeTypeAliases[$extMime]; }