将字符串替换为时间戳

将字符串替换为时间戳

我想使用mod_substitutemod_ext_filter用当前时间戳(以毫秒为单位)替换字符串。

我至今为止已经尝试过了,但是没有效果。

Substitute "1s/myString/&$(date +"%T.%3N")/"

ExtFilterDefine testfilter mode=output intype=text/html cmd=/bin/echo "$(sed -E "1s/myString/&$(date +"%T.%3N")/")"

有人有办法让它运行吗?我也在考虑将它与 ssi 结合起来,但也不行。

答案1

从阅读文档mod_substitute,我找不到任何参考资料来说明为什么您会认为它可以与执行外部进程(或分叉 shell 或任何此类操作)一起使用。因此,我认为这条路线不可行。

mod_ext_filter另一方面,似乎适合你想要做的事情。然而,引用其文档

这种过滤机制比使用专门为 Apache API 编写并在 Apache 服务器进程内运行的过滤器要慢得多

所以,如果我是你,我会考虑使用动态语言,例如 PHP(最初是为这个用例编写的),或者最终编写一个非常小的 C 程序来做你想做的事情,因为它最终会更快,并且不太难。


现在,如果你想坚持你的想法,不要使用/bin/echo。你写的替换"$(sed -E "1s/myString/&$(date +"%T.%3N")/")"需要一个shell,并且/bin/echo不会生成一个。因此,你需要编写一个脚本(我推荐的解决方案),或者至少使用适当的参数调用/bin/sh(或者/bin/bash如果你愿意的话)-c 'var="$(date +"%T.%3N")"; sed -E "1s/myString/&$var/"':。

这确实很黑客,我认为从长远来看,PHP 脚本或 C 程序会更简单,但每个人都有自己的想法。

相关内容