我可以让 Apache 将目录中的最新文件作为索引文件提供吗?

我可以让 Apache 将目录中的最新文件作为索引文件提供吗?

我正在尝试为一个项目构建解决方案,该项目涉及定期将文件从相机上传到 Web 服务器,然后让 Web 服务器显示最新的图像并定期进行清理。相机的功能非常有限;我无法让它在上传新文件时删除文件、重命名旧文件或执行类似操作。我能做的最多就是将时间戳附加到设置的前缀。因此,我正尝试从服务器端解决这个问题。

查看该DirectoryIndex指令,我看不出有什么方法可以将最新的文件作为默认文档,而且我在 Apache 文档中找不到任何其他看起来会产生影响的指令。最终目标是在监控仪表板的小部件中使用它,因此使用静态页面或目录索引页面IndexOrderDefault也行不通。是否可以使用 Apache 来执行此操作,方法是查看按字母顺序排列的最后一个文件(文件名中最新的时间戳)或查看最近创建的文件?

答案1

如果您安装了 PHP,您可以将其放在文件中,以获取文件夹中最新文件的内容index.php

$directory = dirname (__FILE__);
$contents = scandir ($directory);

$recent_file = null;
$modified = 0;
foreach ($contents as $filename)
{
    if (is_file ($filename) && filemtime ($filename) > $modified)
    {
        $modified = filemtime ($filename);
        $recent_file = $filename;
    }
}

echo file_get_contents ($recent_file);

一些注意事项:我没有费心检查null文件名,因为它总是能够找到该文件。因此,您可能想在语句 ( )index.php中放入一个异常,并添加一个拥有值并按您的意愿处理该值的可能性。if$filename != 'index.php$recent_filenull

请注意,这不允许解析返回的文件。这仅在您提供静态 HTML 文件时才有效。另外请注意 - 这不是二进制安全的!如果您希望提供二进制文件(例如来自网络摄像头快照的最新图像?),则应添加具有适当 MIME 类型的 HTTP 标头。

答案2

是的,您可以创建一个在某个时间间隔运行的 SHELL 脚本。该脚本将查找上次更新的文件并DirecrtoryIndex替换.htaccess

该脚本将类似于以下内容:

#!/bin/bash

LASTFILE=$(ls -ltr | tail -n 1 | awk '{print $9}')

sed -i "s/$DirectoryIndex.*/DirectoryIndex\ $LASTFILE/g" .htaccess

答案3

与@Sourav Maity 的回答类似,您也可以使用 Shell 脚本将最新文件重命名为 index.html (或 Apache 设置的任何文件)。

find /path/to/search -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r | head -n1 | xargs -I '{}' mv '{}' index.html

然后让 cron 根据需要经常运行该脚本。

相关内容