freshvine/expiringmediacache

一种简单的本地缓存媒体并在过期后删除的方法。

1.2.0 2022-03-20 17:14 UTC

This package is auto-updated.

Last update: 2024-09-20 23:08:41 UTC


README

Build Status Total Downloads Version License

一种简单的本地缓存媒体并在过期后删除的方法。

此库的核心概念很简单。它为您创建可访问的远程媒体的本地副本。同时,它创建并维护所有缓存媒体的索引。经过预定的时间后,媒体的本地副本将过期,并从您的文件系统和索引中删除。

这对于您想要包含来自第三方源临时内容的项目来说非常理想,但又不希望构建一个包含大量您未来不再使用的旧和不相关内容的庞大仓库。

由于PHP是单线程的(因此是一个阻塞语言),您可能希望将这些媒体请求与主页面加载(例如,通过DOM Ready上的XHR请求)分开处理。这将大大提高您的加载性能。然而,您可以选择以任何您认为合适的方式实现此库。

功能

  • 轻松创建媒体本地仓库。
  • 当不再使用时删除旧媒体。
  • 当已经缓存时,快速将远程URL转换为本地URL。
  • 易于集成到项目中。
  • 对缓存媒体单独应用缓存方法和生命周期。
  • 简化时间性媒体内容的管理工作。
  • 使用JavaScript友好的时间戳进行缓存(ISO 8601)。

将库添加到您的项目

安装composer包

composer require FreshVine/ExpiringMediaCache

除非您定义了不同的一个,否则库将使用默认的目录和路径进行缓存。默认目录在库所在的同一目录下,名为/media-cache/的文件夹中。库还将尝试定义访问此目录的公共URL。它仅在简单和直接的配置下才能成功(没有高级的apache/ngnix映射设置)。

示例用法

require_once __DIR__ . '/vendor/autoload.php';

// Create an instance of the Expiring Media Cache
$ExpiringMedia = new \FreshVine\ExpiringMediaCache\ExpiringMediaCache();

// Get a local URL for cached media
$Cached = $ExpiringMedia->cacheThis('https://github.com/FreshVine/expiring-media-cache/raw/main/test/images/rodin-thinker.jpg');
$URL = $ExpiringMedia->getURL( $Cached );


// Expire media which has outlived its 
$ExpiringMedia->cleanUp();

构造函数允许您在创建时定义本地路径和本地公共URL。以下是一个示例。

require_once __DIR__ . '/vendor/autoload.php';

$ExpiringMedia = new FreshVine\ExpiringMediaCache\ExpiringMediaCache( '/var/www/html/media/', 'https://:8080/media/' );

函数参考

cacheThis

这是主要的缓存函数。它将您想要缓存的远程URL作为其主要属性。您可以为文件名添加可选的前缀和/或后缀。这只是为了您在查看存储媒体的目录时的方便。

返回值一个CacheModel对象

$ExpiringMedia->cacheThis( String $RemoteURL, String $FilenamePrefix = NULL, String $FilenameSuffix = NULL );

getURL

您将需要从缓存中获取URL。这是获取此URL的函数。为了使缓存文件更易于管理,URL不会直接存储在缓存中,而是在请求时由ExpiringMediaCache类生成。

返回值一个字符串形式的URL

$ExpiringMedia->getURL( CacheModel &$CacheModel );
$PublicURL = $ExpiringMedia->getURL( $ExpiringMedia->cacheThis() );

cleanUp

此函数执行三个清理步骤。它将从缓存中删除任何过期的媒体,删除任何相关的文件不再存在于文件系统上的缓存条目,并从文件系统中删除目录中的多余文件。您可以选择通过$ExpiringMedia->setCleanupOnDestruct( true );在每次析构时执行此操作。

返回值布尔值

$ExpiringMedia->cleanUp();

find

此函数接受一个远程URL,如果存在,则返回缓存模型。

返回值一个CacheModel对象

$ExpiringMedia->find( String $RemoteURL );

reloadCache

如果您需要卸载缓存状态并再次从JSON文件中加载缓存,请调用此函数。当您通过setLocalPath()更改LocalPath时,将调用此函数。

返回值布尔值

$ExpiringMedia->reloadCache();

writeCache

调用此函数可强制将缓存写入到_media-cache.json文件。即使显式调用此函数,也只有在缓存发生变化时才会写入缓存。

返回值布尔值

$ExpiringMedia->writeCache();

配置选项

CacheMethod

缓存方法定义了如何将生存期应用于缓存项。当设置为'first'时,生存期将从项目首次缓存时开始计算。当设置为'request'时,它将与最后一次从缓存中请求项目的时间进行比较(而非从文件系统中)。请注意,这是与每个缓存项一起存储的。

选项: first, request
默认: first

	$ExpiringMedia->setCacheMethod( $cacheMethod );
	$ExpiringMedia->getCacheMethod( );

CleanupOnDestruct

如果您不缓存许多文件,可以选择在每次类加载时清理缓存。这可能会很昂贵,因为它需要处理每个缓存条目。默认情况下,此选项是禁用的,您需要手动调用$ExpiringMedia->cleanUp();来删除已过期的条目或已删除媒体的其他条目。

选项: 布尔型 默认: false

$ExpiringMedia->setCleanupOnDestruct( true );
$ExpiringMedia->getCleanupOnDestruct();

Lifetime

生存期是指一个项目应保留在缓存中的分钟数。

默认: 10080 分钟(7 天)

$ExpiringMedia->setLifetime( 7 * 24 * 60 );
$ExpiringMedia->getLifetime();

LocalPath

这允许您定义缓存应存在的位置。此目录只能用于媒体缓存,因为缓存将删除目录中的任何意外文件。当您使用提供的本地文件系统控制器定义此路径时,它将尝试确定公共URL。

默认: __DIR__ . '/media-cache/'

$ExpiringMedia->setLocalPath( __DIR__ . '/media-cache/' );
$ExpiringMedia->setLocalPath( );

LocalPublicURL

与LocalMediaPath相关 - 这是提供媒体路径的公共URL。

默认: YOURDOMAIN/vendor/freshvine/expiring-media-cache/media-cache/

$ExpiringMedia->setLocalPublicURL( 'https://:8080/media-cache/' );
$ExpiringMedia->getLocalPublicURL( );

WriteEveryChange

每次取消设置ExpiringMediaCache时,都会触发缓存写入。如果您希望在每次更改时都写入缓存,可以启用此选项。请注意,如果您存储大量媒体,这将有一些性能损失。

默认: false

$ExpiringMedia->setWriteEveryChange( true );
$ExpiringMedia->getWriteEveryChange( );

UserAgent

为了请求媒体,您需要提供一个用户代理字符串。这应不时更新,以确保其看起来更现代。随着时间的推移,服务可能会阻止某些UA字符串。

默认: false

$ExpiringMedia->setUserAgent( 'User Agent Browser String' );
$ExpiringMedia->getUserAgent( );

FileController

此库包括为PHP安装的本地文件系统编写的文件控制器。您可能需要扩展文件控制器中的抽象函数以支持不同的存储位置(如CDN或其他)。您可以使用Controllers\FileLocal.php来帮助您。

默认: FreshVine\ExpiringMediaCache\Controllers\FileLocal

$MyFileController = new FreshVine\ExpiringMediaCache\Controllers\FileLocal( $ExpiringMedia );
$ExpiringMedia->setFileController( $MyFileController );