• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • filectime()

    (PHP 4, PHP 5, PHP 7)

    取得文件的 inode 修改时间

    说明

    filectime(string $filename): int

    取得文件的 inode 修改时间。

    参数

    $filename

    文件的路径。

    返回值

    返回文件上次 inode 被修改的时间,或者在失败时返回FALSE。时间以 Unix 时间戳的方式返回。

    范例

    Example #1filectime()例子

    <?php
    // 输出类似:  somefile.txt was last changed: December 29 2002 22:16:23.
    $filename = 'somefile.txt';
    if (file_exists($filename)) {
        echo "$filename was last changed: " . date("F d Y H:i:s.", filectime($filename));
    }
    ?>
    

    错误/异常

    失败时抛出E_WARNING警告。

    注释

    Note:

    注意:在大多数 Unix 文件系统中,当一个文件的 inode 数据被改变时则该文件被认为是修改了。也就是说,当文件的权限,所有者,所有组或其它 inode 中的元数据被更新时。参见filemtime()(这才是你想用于在 Web 页面中建立“最后更新时间”脚注的函数)和fileatime()。

    Note:

    注意某些 Unix 说明文本中把 ctime 说成是该文件建立的时间,这是错的。在大多数 Unix 文件系统中没有 Unix 文件的建立时间。

    Note:

    注意:不同文件系统对时间的判断方法可能是不相同的。

    Note:此函数的结果会被缓存。参见clearstatcache()以获得更多细节。

    Tip

    自 PHP 5.0.0 起,此函数也用于某些URL 包装器。请参见支持的协议和封装协议以获得支持stat()系列函数功能的包装器列表。

    参见

    This method gets all the files in a directory, and echoes them in the order of the date they were added (by ftp or whatever).
    <?PHP
    function dirList ($directory, $sortOrder){
      //Get each file and add its details to two arrays
      $results = array();
      $handler = opendir($directory);
      while ($file = readdir($handler)) { 
        if ($file != '.' && $file != '..' && $file != "robots.txt" && $file != ".htaccess"){
          $currentModified = filectime($directory."/".$file);
          $file_names[] = $file;
          $file_dates[] = $currentModified;
        }  
      }
        closedir($handler);
      //Sort the date array by preferred order
      if ($sortOrder == "newestFirst"){
        arsort($file_dates);
      }else{
        asort($file_dates);
      }
      
      //Match file_names array to file_dates array
      $file_names_Array = array_keys($file_dates);
      foreach ($file_names_Array as $idx => $name) $name=$file_names[$name];
      $file_dates = array_merge($file_dates);
      
      $i = 0;
      //Loop through dates array and then echo the list
      foreach ($file_dates as $file_dates){
        $date = $file_dates;
        $j = $file_names_Array[$i];
        $file = $file_names[$j];
        $i++;
          
        echo "File name: $file - Date Added: $date. <br/>"";    
      }
    }
    ?>
    I hope this is useful to somebody.
    Under Windows you can use fileatime() instead of filectime().
    If you need file creation time on Mac OS X:
    <?php
    if ($handle = popen('stat -f %B ' . escapeshellarg($filename), 'r')) {
      $btime = trim(fread($handle, 100));
      echo strftime("btime: %Y.%m.%d %H:%M:%S\n", $btime);
      pclose($handle);
    }
    ?>
    
    Line 37 of the code above has an error.
    echo "File name: $file - Date Added: $date. <br/>""; 
    There is an extra " after the <br/> that needs to be deleted in order for this code to work.
    Filemtime seems to return the date of the EARLIEST modified file inside a folder, so this is a recursive function to return the date of the LAST (most recently) modified file inside a folder.
    <?php
    // Only take into account those files whose extensions you want to show.
    $allowedExtensions = array(
     'zip',
     'rar',
     'pdf',
     'txt'
    );
    function filemtime_r($path)
    {
      global $allowedExtensions;
      
      if (!file_exists($path))
        return 0;
      
      $extension = end(explode(".", $path));   
      if (is_file($path) && in_array($extension, $allowedExtensions))
        return filemtime($path);
      $ret = 0;
      
       foreach (glob($path."/*") as $fn)
       {
        if (filemtime_r($fn) > $ret)
          $ret = filemtime_r($fn);  
          // This will return a timestamp, you will have to use date().
       }
      return $ret;  
    }
    ?>
    
    Note that on Windows systems, filectime will show the file creation time, as there is no such thing as "change time" in Windows.
    You should avoid feeding the function files without a path. This applies for filemtime() and possibly fileatime() as well. If you omit the path the command will fail with the warning "filectime(): stat failed for filename.php".
    filectime running on windows reading a file from a samba share, will still show the last modified date.
    If you use filectime with a symbolic link, you will get the change time of the file actually linked to. To get informations about the link self, use lstat.

    上篇:fileatime()

    下篇:filegroup()