awonderphp / fileresource
用于网页中嵌入的资源(图像、脚本等)的抽象类
Requires
- php: ~7.1.0 || ~7.2.0
- awonderphp/filewrapper: ^1.1
Requires (Dev)
- phpunit/phpunit: ^7
- squizlabs/php_codesniffer: 3.*
- vimeo/psalm: ^0
This package is not auto-updated.
Last update: 2024-09-20 21:36:06 UTC
README
用于网页中嵌入的资源(图像、脚本等)的抽象类
此包旨在提供一个标准方式,让Web应用可以将网页中嵌入的资源作为对象处理。
将资源作为对象处理的优势在于,它们可以同时具有属性和方法,这些方法可以使用这些属性和/或参数执行操作。
此包还包括一个抽象类,用于使用PHP通过FileResource对象描述的资源提供服务。
安装包
您可以使用以下命令安装此类:composer require awonderphp/fileresource:^1.0
类属性
以下属性由抽象类定义
-
protected $mime = null;
当客户端请求文件时应使用的MIME类型。 -
protected $checksum = null;
用于计算校验和摘要的算法,后跟冒号,后跟校验和摘要的十六进制或base64表示形式。建议使用浏览器必须支持的SHA-2算法之一,用于与integrity
属性一起使用。 -
protected $validIntegrityAlgo = array('sha256', 'sha384', 'sha512');
支持integrity
属性的所有网络浏览器的算法。 -
protected $filepath = null;
本地服务器上文件的完整路径。请注意,当对象描述的文件不在本地文件系统上时,此属性应保持为null
。 -
protected $crossorigin = null;
当创建引用资源的(X)HTML节点时应使用的crossorigin
属性的值。 -
$validCrossOrigin = array('anonymous', 'use-credentials');
可以与crossorigin
属性一起使用的有效选项。 -
protected $lastmod = null;
文件最后修改的时间,使用ISO 8601格式Y-m-d\TH:i:sO
,在PHP中可以表示为date('c')
。这不一定要与本地文件系统上的文件时间戳匹配,这通常不准确。 -
protected $urlscheme = null;
应该是null
、http
或https
之一。在创建嵌入资源的src
或href
属性时应使用的方案。当资源将从与提供网页相同的服务器提供时,应为此null
。 -
protected $urlhost = null;
应该是null
或创建嵌入资源的src
或href
属性时应使用的域名。当资源将从与提供网页相同的服务器提供时,应为此null
。 -
protected $urlpath = null;
在创建嵌入资源的src
或href
属性时应使用的服务器上资源的路径。 -
protected $urlquery = null;
如果需要URL查询(URL中?
后面的部分),则在构造嵌入资源的src
或href
属性时应附加到URL末尾的查询。
关于类属性的说明
对于许多文件,需要额外的属性才能在网页中充分嵌入资源(例如图像的alt
标签和可能的caption
)
这个抽象类旨在定义嵌入网页中资源所需的大部分属性,以及PHP包装器正确服务文件所需的所有属性。
四个url*
属性与PHP函数parse_url
对应,以下省略了以下内容:
-
端口号
仅适用于资源为远程的情况,在这种情况下应首选HTTPS,并且仅应使用HTTPS的默认端口443。 -
用户
不是嵌入网页中资源的URL的适当组件。 -
密码
不是嵌入网页中资源的URL的适当组件。 -
片段
不是嵌入网页中资源的URL的适当组件。
类方法
抽象类定义了以下方法:
-
public function getMimeType()
返回$mime
属性。 -
public function getChecksum()
返回$checksum
属性。 -
public function getCrossOrigin()
返回$crossorigin
属性。 -
public function getFilePath()
返回$filepath
属性。 -
public function validateFile()
如果$checksum
属性已设置且$filepath
属性已设置且文件存在,如果文件与校验和匹配则返回true
,否则返回false
。 -
public function getSrcAttribute($prefix = null)
构建嵌入网页中所需的src
或href
属性的值。请注意,如果$urlscheme
属性为http
并且文件没有使用$validIntegrityAlgo
属性中的算法的$checksum
属性,则将返回null
。可选参数$prefix
是放置在$urlpath
属性之前的一个文件系统路径,这对于使用包装器服务文件的Web应用程序很有用。 -
public function getIntegrityAttribute()
如果$checksum
属性使用合适的算法,构建integrity
属性的值。 -
public function getTimestamp()
如果$lastmode
属性不为null,则返回UNIX时间戳(自UNIX纪元以来的秒数)。
FileWrapper类
这是一个扩展了我的\AWonderPHP\FileWrapper\FileWrapper
类的类。这个类是为了编写一个下载包装器而编写的,包括对客户端缓存验证和部分内容请求的支持。
但是,该类使用文件系统上的文件的最后修改时间戳作为Last-Modified
头,并使用文件系统上的文件的inode生成ETag
头。
扩展的类允许修改时间戳和ETag独立于文件系统上的文件来设置。
ResourceServer类
这是一个提供基于FileResource
对象的公共方法来服务文件的抽象类。
想法是通过添加一个构造方法来扩展类,该方法构建必要的FileResource
对象,然后服务它。
GenericFileResource类
这是一个非常通用的类,它扩展了FileResource
抽象类。它存在是为了便于对抽象类中的公共方法进行单元测试,但它也可以用于Web应用程序。
__construct
函数接受一个参数,即一个key => value
对的数组,其中key
对应于您希望设置的FileResource属性。
单元测试
使用PHPUnit版本7进行单元测试。结果可以在文件UnitTestResults.txt中查看。
EOF