【问题标题】:PHP File Created/Modified TimePHP 文件创建/修改时间
【发布时间】:2013-02-24 21:50:28
【问题描述】:

我有一个 PHP 站点,它接受用户上传的文件,并且需要在数据库中存储文件创建/修改(在这种情况下它们应该是相同的)日期/时间。

我尝试了几种方法。这些似乎都没有返回:

$metadata = stat($localfile);
$timestamp = $metadata[9];
die($timestamp);

$metadata = stat($localfile);
$timestamp = $metadata[10];
die($timestamp);

$metadata = filemtime($localfile);
die($metadata);

$metadata = filectime($localfile);
die($metadata);

所以我尝试了基于ls -l 的shell_exec 方法。这至少会返回一些内容,尽管在上传文件时似乎会覆盖时间,从而使输出变得无用(即它返回当前时间)。

在 Linux/PHP 5.4 上是否有任何可靠的方式来返回文件上传之前的创建/修改日期/时间?

NB $localfile 是本地系统上文件的路径。

【问题讨论】:

  • filemtime 是你想要的。可能是路径不对,或者上传的文件权限不对
  • 所有这些函数调用什么都不返回,同时is_file($localfile)返回true?
  • is_file 显示为真。上传文件的权限为-rw-------,所有者为apache用户
  • 您无法在文件上传之前获取创建/修改日期/时间,除非用户手动输入该信息。知道文件路径就可以很容易的获取上传的时间戳。

标签: php shell-exec filemtime


【解决方案1】:

据我所知,在 PHP 中没有办法找到文件过去修改时间的历史记录。 Linux(不添加任何额外工具)保持三倍访问/修改/更改

ls -ce
ls -le
ls -ue

除非您在 linux 中找到审计工具,否则无法获取文件修改的“历史记录”。因此 PHP 将不支持您正在尝试做的事情。

数据库用于精确存储文件的修改历史,使用它。

【讨论】:

    【解决方案2】:

    stat() 函数产生一个关联数组。对于修改时间,使用 $stat['mtime'] 和创建时间 $stat['ctime']。这与服务器的文件副本有关。

    文件在上传时不会从计算机“移动”到服务器,数据流会在移动到网络服务器位置之前复制到临时目录中的新文件中。浏览器也不发送修改时间戳。

    【讨论】:

      猜你喜欢
      • 2023-03-19
      • 1970-01-01
      • 2017-12-16
      • 2010-09-19
      • 1970-01-01
      • 2012-03-09
      • 2011-08-16
      • 2013-02-19
      • 1970-01-01
      相关资源
      最近更新 更多