* @since 2.0 */ class MimeTypeController extends Controller { /** * @var array MIME type aliases */ private $aliases = [ 'text/xml' => 'application/xml', ]; /** * @var array MIME types to add to the ones parsed from Apache files */ private $additionalMimeTypes = [ 'mjs' => 'text/javascript', ]; /** * @param string $outFile the mime file to update. Defaults to @yii/helpers/mimeTypes.php * @param string $aliasesOutFile the aliases file to update. Defaults to @yii/helpers/mimeAliases.php */ public function actionIndex($outFile = null, $aliasesOutFile = null) { if ($outFile === null) { $outFile = Yii::getAlias('@yii/helpers/mimeTypes.php'); } if ($aliasesOutFile === null) { $aliasesOutFile = Yii::getAlias('@yii/helpers/mimeAliases.php'); } $this->stdout('Downloading mime-type file from apache httpd repository...'); if ($apacheMimeTypesFileContent = file_get_contents('http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/conf/mime.types?view=co')) { $this->stdout("Done.\n", Console::FG_GREEN); $this->generateMimeTypesFile($outFile, $apacheMimeTypesFileContent); $this->generateMimeAliasesFile($aliasesOutFile); } else { $this->stderr("Failed to download mime.types file from apache SVN.\n"); } } /** * @param string $outFile * @param string $content */ private function generateMimeTypesFile($outFile, $content) { $this->stdout("Generating file $outFile..."); $mimeMap = []; foreach (explode("\n", $content) as $line) { $line = trim($line); if (empty($line) || $line[0] === '#') { // skip comments and empty lines continue; } $parts = preg_split('/\s+/', $line); $mime = array_shift($parts); foreach ($parts as $ext) { if (!empty($ext)) { $mimeMap[$ext] = $mime; } } } $mimeMap = array_merge($mimeMap, $this->additionalMimeTypes); ksort($mimeMap); $array = VarDumper::export($mimeMap); $content = <<stdout("done.\n", Console::FG_GREEN); } /** * @param string $outFile */ private function generateMimeAliasesFile($outFile) { $this->stdout("generating file $outFile..."); $array = VarDumper::export($this->aliases); $content = <<stdout("done.\n", Console::FG_GREEN); } }