Php 非动态自定义HTTP头

Php 非动态自定义HTTP头,php,apache,video,audio,html,Php,Apache,Video,Audio,Html,根据这一点,媒体在浏览器中使用X-Content-Duration标题,以秒为单位显示作品的长度,从而更加无缝地工作 假设我将该长度存储在某个地方(当然是在数据库中,可能也存储在文件名本身(video file name.XXX.ogv,其中XXX是以秒为单位的时间)),是否有任何方法仅使用Apache.htaccess设置来形成这个额外的头?我这样问是因为将文件加载到PHP脚本似乎很笨拙,特别是当PHP默认情况下会添加其他禁用缓存的头,并且不会正确响应范围(部分内容)请求时。是的,很多代码都可

根据这一点,媒体在浏览器中使用
X-Content-Duration
标题,以秒为单位显示作品的长度,从而更加无缝地工作


假设我将该长度存储在某个地方(当然是在数据库中,可能也存储在文件名本身(
video file name.XXX.ogv
,其中
XXX
是以秒为单位的时间)),是否有任何方法仅使用Apache
.htaccess
设置来形成这个额外的头?我这样问是因为将文件加载到PHP脚本似乎很笨拙,特别是当PHP默认情况下会添加其他禁用缓存的头,并且不会正确响应范围(部分内容)请求时。是的,很多代码都可以用PHP编写来支持ETag和范围请求,但是当Apache内置了所有这些功能时,仅仅为了添加一个标头就这样做似乎有些过分了。

我没有示例,但您应该能够使用mod_标头在.htaccess级别指定HTTP响应标头

当然,我应该在哪里添加标题的问题实际上取决于您如何访问它。如果您只是点击一个静态资源进行下载,那么通过Apache添加它是有意义的。但是,您提到了DB。如果您决定将这些文件存储在数据库中,那么就有一些API提供该文件,在这种情况下,API实现应该附加头,而不是卸载到apache


此外,如果您想要的动态数据曾经需要处理来确定(它不在文件名或其他文件中),那么您已经在使用一些代码引擎来实现它,只需添加标题即可。

这是您使用mod_perl扩展所做的事情,拦截这些请求并在允许Apache继续处理它之前添加额外的头

一种可能有效的纯PHP方法是使用mod_rewrite让请求通过PHP路由,添加额外的头,然后让Apache使用函数处理其余的请求

或者,您可以使用持续时间数据库构建一个静态.htaccess文件,该文件使用mod_头为每个请求的文件插入正确的持续时间头。

这是的域。它允许静态地为文件分配额外的HTTP头


您可以使用cron作业,为每个视频生成一个*.meta文件。

我看到的一个问题是,该文件的长度(以秒或其他单位表示)不是文件的大小。视频或音频文件本身最好是一个静态文件,尽管嵌入该文件的HTML将由PHP编写。@TRiG:这是一个非常旧的模块,可能是在阿帕奇时代之前。但这可能是修改标题的最有效的解决方案。我做了一些测试并使其生效,所以我决定使用这个。计划的工作流程:
1
用户上载视频或音频文件
2
PHP调用FFmpeg以查找有关媒体文件的各种信息(容器、编解码器、持续时间)
3
PHP调用FFmpeg以创建HTML5所需的所有格式的文件版本(除非原始上传已经是一种这样的格式,在这种情况下,我们需要做的工作会少一些)
4
PHP使用之前从FFmpeg获得的“持续时间”信息为每个Ogg文件创建
.meta
文件。我还没开始上传呢!
virtual()
函数看起来很吸引人,感谢您让我注意到一段我一无所知的PHP,但我决定使用
mod\u cern\u meta