Php 为什么此脚本要更改我的文件';什么时候?

Php 为什么此脚本要更改我的文件';什么时候?,php,macos,md5,stat,ctime,Php,Macos,Md5,Stat,Ctime,我正在用PHP编写一个法医磁盘目录脚本。该脚本迭代文件系统,收集关于每个文件或目录的各种元数据和统计信息,并将这些信息存储在SQL数据库中。对于我的应用程序来说,文件系统在任何可能的范围内保持不变是至关重要的。以只读方式挂载文件系统是一种选择,但不是一种好的选择 我遇到的问题是,脚本中的某些内容正在修改文件的CTIME。在脚本前后对文件运行stat显示ctime已更改为脚本的执行时间。我理解并期望修改atime,并且成功地缓存了atime,读取了文件,然后将原始atime写回。但是,如果不付出非

我正在用PHP编写一个法医磁盘目录脚本。该脚本迭代文件系统,收集关于每个文件或目录的各种元数据和统计信息,并将这些信息存储在SQL数据库中。对于我的应用程序来说,文件系统在任何可能的范围内保持不变是至关重要的。以只读方式挂载文件系统是一种选择,但不是一种好的选择

我遇到的问题是,脚本中的某些内容正在修改文件的CTIME。在脚本前后对文件运行stat显示ctime已更改为脚本的执行时间。我理解并期望修改atime,并且成功地缓存了atime,读取了文件,然后将原始atime写回。但是,如果不付出非凡的努力,ctimes是不能随意修改的

下面是针对每个文件运行的相关命令。注意:这是一个Mac系统,有一些特定于Mac的命令:

#get stat
stat -x $path

#directory item count excluding dotfiles
find $path \( ! -regex '.*/\..*' \) | wc -l

#get size
du -ks $path

#get HFS+ attrs (Mac)
GetFileInfo -P $path

#get quicklook thumbnail (Mac)
qlmanage -t -f 2 -o /tmp/thumb.jpg $path

#get media thumbnail
ffmpegthumbnailer -i $path -o /tmp/ -s 200 -c png 

#get spotlight metadata (Mac)
mdls -plist - $path

#get mediainfo
mediainfo --Output=XML $path

#get exif
exiftool -php $path 
此外,还使用了许多PHP内置的文件方法:

$splFileInfo->getSize();
$splFileInfo->getLinkTarget();
$splFileInfo->getRealPath();
$splFileInfo->getInode();
$splFileInfo->getPerms();
$splFileInfo->getOwner();
$splFileInfo->getGroup();
$splFileInfo->getCTime();
$splFileInfo->getMTime();
我还生成了一个散列:

md5_file($path);

是否有一个善良的灵魂可以看到列表中的任何东西,可以想象修改文件的ctime?据我所知,只有当一个文件或文件的元数据被改变时,ctime才应该改变。这些命令都不应该这样做。

与问题无关,但您应该引用变量。否则,脚本将无法正确处理带有空格的文件名。请尝试在每个命令后放置
stat-f%c“$file”
,以查看哪个命令正在执行。我在我的一个文件上尝试了您的脚本,但没有更改ctime。但是,我没有使用
mediainfo
exiftool
命令。是的,在脚本中,shell路径被正确封装。我确实一个接一个地尝试了每个命令,但似乎没有人这么做,但脚本做到了。我想这可能是PHP方法,但这就没有什么意义了!如果脚本中没有任何命令执行此操作,则此脚本中不会执行此操作。它必须在获取文件名和调用脚本的代码中。