mirror of
				https://github.com/avecms/AVE.cms.git
				synced 2025-10-30 21:26:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			194 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| #!/usr/bin/php
 | |
| 
 | |
| <?php
 | |
| define('APACHE_MIME_TYPES_URL', 'http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types');
 | |
| define('FREEDESKTOP_XML_URL', 'https://raw2.github.com/minad/mimemagic/master/script/freedesktop.org.xml');
 | |
| 
 | |
| function generateUpToDateMimeArray()
 | |
| {
 | |
|     $preamble = "<?php\n\n";
 | |
|     $preamble .= "/*\n";
 | |
|     $preamble .= " * This file is part of SwiftMailer.\n";
 | |
|     $preamble .= " * (c) 2004-2009 Chris Corbyn\n *\n";
 | |
|     $preamble .= " * For the full copyright and license information, please view the LICENSE\n";
 | |
|     $preamble .= " * file that was distributed with this source code.\n *\n";
 | |
|     $preamble .= " * autogenerated using http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types\n";
 | |
|     $preamble .= " * and https://raw.github.com/minad/mimemagic/master/script/freedesktop.org.xml\n";
 | |
|     $preamble .= " */\n\n";
 | |
|     $preamble .= "/*\n";
 | |
|     $preamble .= " * List of MIME type automatically detected in Swift Mailer.\n";
 | |
|     $preamble .= " */\n\n";
 | |
|     $preamble .= "// You may add or take away what you like (lowercase required)\n\n";
 | |
| 
 | |
|     // get current mime types files
 | |
|     $mime_types = @file_get_contents(APACHE_MIME_TYPES_URL);
 | |
|     $mime_xml = @file_get_contents(FREEDESKTOP_XML_URL);
 | |
| 
 | |
|     // prepare valid mime types
 | |
|     $valid_mime_types = array();
 | |
| 
 | |
|     // split mime type and extensions eg. "video/x-matroska        mkv mk3d mks"
 | |
|     if (preg_match_all('/^#?([a-z0-9\-\+\/\.]+)[\t]+(.*)$/miu', $mime_types, $matches) !== false) {
 | |
|         // collection of predefined mimetypes (bugfix for wrong resolved or missing mime types)
 | |
|         $valid_mime_types_preset = array(
 | |
|             'php' => 'application/x-php',
 | |
|             'php3' => 'application/x-php',
 | |
|             'php4' => 'application/x-php',
 | |
|             'php5' => 'application/x-php',
 | |
|             'zip' => 'application/zip',
 | |
|             'gif' => 'image/gif',
 | |
|             'png' => 'image/png',
 | |
|             'css' => 'text/css',
 | |
|             'js' => 'text/javascript',
 | |
|             'txt' => 'text/plain',
 | |
|             'aif' => 'audio/x-aiff',
 | |
|             'aiff' => 'audio/x-aiff',
 | |
|             'avi' => 'video/avi',
 | |
|             'bmp' => 'image/bmp',
 | |
|             'bz2' => 'application/x-bz2',
 | |
|             'csv' => 'text/csv',
 | |
|             'dmg' => 'application/x-apple-diskimage',
 | |
|             'doc' => 'application/msword',
 | |
|             'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
 | |
|             'eml' => 'message/rfc822',
 | |
|             'aps' => 'application/postscript',
 | |
|             'exe' => 'application/x-ms-dos-executable',
 | |
|             'flv' => 'video/x-flv',
 | |
|             'gz' => 'application/x-gzip',
 | |
|             'hqx' => 'application/stuffit',
 | |
|             'htm' => 'text/html',
 | |
|             'html' => 'text/html',
 | |
|             'jar' => 'application/x-java-archive',
 | |
|             'jpeg' => 'image/jpeg',
 | |
|             'jpg' => 'image/jpeg',
 | |
|             'm3u' => 'audio/x-mpegurl',
 | |
|             'm4a' => 'audio/mp4',
 | |
|             'mdb' => 'application/x-msaccess',
 | |
|             'mid' => 'audio/midi',
 | |
|             'midi' => 'audio/midi',
 | |
|             'mov' => 'video/quicktime',
 | |
|             'mp3' => 'audio/mpeg',
 | |
|             'mp4' => 'video/mp4',
 | |
|             'mpeg' => 'video/mpeg',
 | |
|             'mpg' => 'video/mpeg',
 | |
|             'odg' => 'vnd.oasis.opendocument.graphics',
 | |
|             'odp' => 'vnd.oasis.opendocument.presentation',
 | |
|             'odt' => 'vnd.oasis.opendocument.text',
 | |
|             'ods' => 'vnd.oasis.opendocument.spreadsheet',
 | |
|             'ogg' => 'audio/ogg',
 | |
|             'pdf' => 'application/pdf',
 | |
|             'ppt' => 'application/vnd.ms-powerpoint',
 | |
|             'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
 | |
|             'ps' => 'application/postscript',
 | |
|             'rar' => 'application/x-rar-compressed',
 | |
|             'rtf' => 'application/rtf',
 | |
|             'tar' => 'application/x-tar',
 | |
|             'sit' => 'application/x-stuffit',
 | |
|             'svg' => 'image/svg+xml',
 | |
|             'tif' => 'image/tiff',
 | |
|             'tiff' => 'image/tiff',
 | |
|             'ttf' => 'application/x-font-truetype',
 | |
|             'vcf' => 'text/x-vcard',
 | |
|             'wav' => 'audio/wav',
 | |
|             'wma' => 'audio/x-ms-wma',
 | |
|             'wmv' => 'audio/x-ms-wmv',
 | |
|             'xls' => 'application/excel',
 | |
|             'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
 | |
|             'xml' => 'application/xml',
 | |
|         );
 | |
| 
 | |
|         // wrap array for generating file
 | |
|         foreach ($valid_mime_types_preset as $extension => $mime_type) {
 | |
|             // generate array for mimetype to extension resolver (only first match)
 | |
|             $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'";
 | |
|         }
 | |
| 
 | |
|         // collect extensions
 | |
|         $valid_extensions = array();
 | |
| 
 | |
|         // all extensions from second match
 | |
|         foreach ($matches[2] as $i => $extensions) {
 | |
|             // explode multiple extensions from string
 | |
|             $extensions = explode(' ', strtolower($extensions));
 | |
| 
 | |
|             // force array for foreach
 | |
|             if (!is_array($extensions)) {
 | |
|                 $extensions = array($extensions);
 | |
|             }
 | |
| 
 | |
|             foreach ($extensions as $extension) {
 | |
|                 // get mime type
 | |
|                 $mime_type = $matches[1][$i];
 | |
| 
 | |
|                 // check if string length lower than 10
 | |
|                 if (strlen($extension) < 10) {
 | |
|                     // add extension
 | |
|                     $valid_extensions[] = $extension;
 | |
| 
 | |
|                     if (!isset($valid_mime_types[$mime_type])) {
 | |
|                         // generate array for mimetype to extension resolver (only first match)
 | |
|                         $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'";
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     $xml = simplexml_load_string($mime_xml);
 | |
| 
 | |
|     foreach ($xml as $node) {
 | |
|         // check if there is no pattern
 | |
|         if (!isset($node->glob['pattern'])) {
 | |
|             continue;
 | |
|         }
 | |
| 
 | |
|         // get all matching extensions from match
 | |
|         foreach ((array) $node->glob['pattern'] as $extension) {
 | |
|             // skip none glob extensions
 | |
|             if (strpos($extension, '.') === false) {
 | |
|                 continue;
 | |
|             }
 | |
| 
 | |
|             // remove get only last part
 | |
|             $extension = explode('.', strtolower($extension));
 | |
|             $extension = end($extension);
 | |
| 
 | |
|             // maximum length in database column
 | |
|             if (strlen($extension) <= 9) {
 | |
|                 $valid_extensions[] = $extension;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         if (isset($node->glob['pattern'][0])) {
 | |
|             // mime type
 | |
|             $mime_type = strtolower((string) $node['type']);
 | |
| 
 | |
|             // get first extension
 | |
|             $extension = strtolower(trim($node->glob['ddpattern'][0], '*.'));
 | |
| 
 | |
|             // skip none glob extensions and check if string length between 1 and 10
 | |
|             if (strpos($extension, '.') !== false || strlen($extension) < 1 || strlen($extension) > 9) {
 | |
|                 continue;
 | |
|             }
 | |
| 
 | |
|             // check if string length lower than 10
 | |
|             if (!isset($valid_mime_types[$mime_type])) {
 | |
|                 // generate array for mimetype to extension resolver (only first match)
 | |
|                 $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'";
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // full list of valid extensions only
 | |
|     $valid_mime_types = array_unique($valid_mime_types);
 | |
|     ksort($valid_mime_types);
 | |
| 
 | |
|     // combine mime types and extensions array
 | |
|     $output = "$preamble\$swift_mime_types = array(\n    ".implode($valid_mime_types, ",\n    ")."\n);";
 | |
| 
 | |
|     // write mime_types.php config file
 | |
|     @file_put_contents('./mime_types.php', $output);
 | |
| }
 | |
| 
 | |
| generateUpToDateMimeArray();
 |