tuum/filemap

适用于各种文件类型的文件映射器。

1.0.0 2016-08-31 01:39 UTC

This package is auto-updated.

Last update: 2024-08-28 17:11:40 UTC


README

一个将路径映射到各种文件类型的文件映射器,例如图像、文本和Markdown文件。

根据给定的路径查找文件,并返回文件资源或内容(字符串)、关联的MIME类型和其他信息。

许可证

MIT许可证

PSR

PSR-1、PSR-2和PSR-4。

用法

$map = Tuum\Locator\FileMap::forge(
    __DIR__.'/map',   // root dir where mapped files exist. 
    __DIR__.'/cache'  // give cache dir to convert md files.
);

// render the file based on path.
$found = $map->render('images/sample.jpg');
if (!$found->found()) {
    echo 'not found';
}
header('Content-Type: '.$found->getMimeType());
if ($fp = $found->getResource()) {
    fpassthru($fp);
} else {
    echo $found->getContents();
}

render 方法将查找文件,然后返回一个FileInfo对象,该对象具有以下方法:

FileInfo 对象

FileInfor具有以下方法:

  • FileInfo::found(): bool:如果给定路径存在文件,则返回true。
  • FileInfo::getMimeType(): string|null:返回文件MIME类型。
  • FileInfo::getResource(): resource|null:返回图像等资源的资源。
  • FileInfo::getContents(): string:返回文本文件的内容。如果提供了资源,此方法返回文件资源的内容。

根据文件类型,FileInfo对象可能具有文件资源或字符串形式的文件内容。首先尝试检索文件资源,如果没有找到资源,则检索文件内容。

输出

基于扩展输出

如果以下条件满足,FileMap将作为资源输出文件:

  • 路径有扩展名(例如sample.jpg),
  • 扩展名在$map->emit_extension中定义,
  • 在路径中找到了文件。

以下是一些预定义的扩展和关联的MIME类型列表:

    public $emit_extensions = [
        'pdf'  => 'application/pdf',
        'gif'  => 'image/gif',
    ];

要添加您的扩展,

$map->addEmitExtension('swf', 'application/x-shockwave-Flash');

查看文件内容

如果以下条件满足,FileMap将作为文本输出文件内容:

  • 未通过扩展处理输出,
  • 存在具有在$map->view_extensions中定义的扩展名的文件。

要添加用于查看文件的扩展名,

$map->addViewExtension('twig', 
    function(FileInfo $found) use($twig) {
        $found->setContents($twig->render($found->getLocation()));
        return $found;
    }, 
    'text/html');

以下显示了预定义的扩展和渲染行为。在所有情况下,它返回的MIME类型为text/html

  • .php:将文件评估为PHP。
  • .txt、.text:获取内容并将字符串放在<pre> HTML标签内。
  • .md:使用MarkUp对象将文件转换为HTML。

CommonMark的MarkUp

MarkUp类将common-mark(又名Markdown)文件转换为HTML。构造集是markdown文件的根目录和缓存目录,

用法

$markUp = Tuum\Locator\MarkUp::forge('/path/to/md', '/cache/dir');
$html = $markUp->getHtml('to/mark/down.md');

如果找不到缓存的HTML文件,$markUp将仅将CommonMark转换为HTML。