如何通过PHP函数或Linux命令判断文件是否被用户修改?
判断文件是否修改(无原文件访问权限)的方案
刚好碰到过类似的需求,给你整理两个靠谱的方案,分别对应PHP和Linux命令行场景,完全适配你没法访问原文件的情况:
PHP 实现方案
核心思路是提前留存原文件的哈希值快照(比如在原文件还能访问的时候生成并存储到数据库/配置文件里),之后对比当前文件的哈希值和快照是否一致——哈希值是文件内容的唯一标识,只要内容修改,哈希就会变化,和修改时间完全无关。
示例代码:
// 假设你预先保存了原文件的SHA256哈希值(原文件可访问时生成) $originalFileHash = '这里替换为原文件的SHA256哈希字符串'; $targetFilePath = '/path/to/your/target/file'; if (file_exists($targetFilePath)) { // 计算当前文件的SHA256哈希 $currentFileHash = hash_file('sha256', $targetFilePath); // 对比哈希,输出是否修改 echo $currentFileHash !== $originalFileHash ? '是' : '否'; } else { echo '目标文件不存在'; }
提示:推荐用SHA256哈希,比MD5/SHA1更安全,避免哈希碰撞的风险。
Linux 命令行方案
同样基于哈希对比的思路,先在原文件可访问时生成哈希快照文件,后续用命令对比即可:
1. 预先生成哈希快照(原文件可访问时执行)
# 生成原文件的SHA256哈希并保存到文件 sha256sum /path/to/original/file > file_hash_check.txt
2. 检查文件是否修改(原文件不可访问时执行)
# 先判断文件是否存在 if [ -f /path/to/current/file ]; then # 对比哈希,匹配则输出"否",不匹配输出"是" sha256sum --check file_hash_check.txt | grep -q "OK" && echo "否" || echo "是" else echo "目标文件不存在" fi
替代方案:如果需要更轻量的哈希,可以用md5sum或sha1sum,但SHA256的安全性更高。
内容的提问来源于stack exchange,提问作者Amin Z
相关产品推荐
相关产品推荐

