【问题标题】:How do I sort a directory by time, and display the last four image files matching a pattern with php?如何按时间对目录进行排序,并显示与 php 模式匹配的最后四个图像文件?
【发布时间】:2011-02-01 07:00:27
【问题描述】:

我有一个会经常更新的目录,我想在我的 php 页面上显示最近上传的四个匹配特定模式的图像文件。

这是否可能无需对目录中的每个图像执行排序?

非常感谢!

【问题讨论】:

    标签: php regex sorting directory


    【解决方案1】:

    如果你想要最后四个文件,你总是需要排序,但你最好让文件系统为你做。除非您的模式是正则表达式,否则这将在 linux 上运行:

    $pattern = '*.jpg';
    exec( "ls $pattern -1t | head -4", $files );
    foreach( $files as $thisFile ) {
        echo "<img src='", $serverPathToFiles, $thisFile, "' alt='blah' />\n";
    }
    

    如果您必须使用正则表达式,请将前两行更改为

    $pattern = 'web2\.[4-5]'; // for web2.42 etc.
    exec( "ls -1t | grep -e $pattern | head -4", $files );
    

    【讨论】:

    • 嗨,安迪,感谢您的回复。尽管我不接受任何用户输入文件名或此代码的任何其他部分,但我想知道您是否知道我在执行此类系统命令时可能遇到的任何安全或性能问题?
    • @purpletonic 安全性:apache 需要访问文件系统文件夹的权限;永远不要将未转义的用户输入传递给 shell。性能:无,除非目录很大;第一次读取后,文件系统将缓存文件句柄,后续读取会更快;正则表达式总是稍慢。
    • 感谢您的指点。正如我提到的,没有用户提交的输入,所以应该没问题。只是想检查其他安全问题和性能。不得不将 Regex 与 egrep 一起使用,但您的解决方案很容易修改。干杯!
    【解决方案2】:

    不知道你叫什么“对目录中的每个图像执行排序”,但你必须将所有文件名读入数组,然后为每个文件读取 ctime。然后对结果数组进行排序。

    【讨论】:

      猜你喜欢
      • 2016-02-14
      • 1970-01-01
      • 2015-02-14
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 2021-08-31
      • 2013-06-18
      • 1970-01-01
      相关资源
      最近更新 更多