mirror of https://github.com/avecms/AVE.cms.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
7.6 KiB
193 lines
7.6 KiB
#!/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();
|
|
|