File size: 7,762 Bytes
e4f4821 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 |
#!/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();
|