5

我正在开发一个 WordPress 博客。以前的开发人员使用“Exec-PHP”在某个页面中执行 PHP 脚本。

以下一个显示在http://url-of-the-page/“/homez.406/xxx/www/wp-content/xxx/xxx/”中包含的文件列表中。

我想按日期订购文件,但我不知道该怎么做!有人已经用过这个了吗?

<!--?php showContent('/homez.406/xxx/www/wp-content/xxx/xxx/','http://url-of-the-page/',false,false); ?-->

这是我在functions.php中找到的

function showContent($path,$webpath,$adminclear,$adminup){

if ($handle = opendir($path))
{
   if ($adminclear==true)

   {
    global $user_ID; if( $user_ID ) :
    if( current_user_can('level_10') ) :
    $auth=true;
    else : 
    $auth=false;
    endif; 
    endif; 
   }

   if ($adminup==true)

   {
    global $user_ID; if( $user_ID ) :
    if( current_user_can('level_10') ) :
    $authup=true;
    else : 
    $authup=false;
    endif; 
    endif; 
   }

   else{$auth=true;$authup=true;}



   if ((isset($_POST['dlfile']))&&($auth==true))
   {
   $removefile=$_POST['dlfile'];
    unlink ($removefile);

   }


   while (false !== ($file = readdir($handle)))
   {
       if ($file != "." && $file != "..")
       {
           $fName  = $file;
           $goodpath=$webpath.$fName;
           $file   = $path.$file;
           $abpath=$path.$fName;


           if(is_file($file)) {
               echo "<p><a href='http://www.otrmd.com/wp-content/themes/FactoryWP/dl.php?p=".$goodpath."&f=".$fName."'>".$fName."</a><br/> Uploaded on ".date ('d-m-Y H:i:s', filemtime($file))."<br/>Size: ".filesize($file)." bytes</p>";

               if($auth==true)
               {
               echo "<form method='post' action=".$_SERVER['REQUEST_URI'].">
               <input type='hidden' name='dlfile' value='".$abpath."'>
               <input type='submit' value='Clear File'>
               </form><br/>";
               }
           } elseif (is_dir($file)) {
               print "<p><a href='".$_SERVER['PHP_SELF']."?path=$file'>$fName</a></p><br/><br/>";
           }
       }
   }

   closedir($handle);
}    
if ($authup==true)
   {

   echo ("[uploadify folder='".$path."' multi=true]");

   }

}
4

1 回答 1

1

这里的问题是使用了该功能readdir,并且文档说:

The entries are returned in the order in which they are stored by the filesystem.

所以我建议scandir结合使用uasort, 对文件进行排序filemtime

代替

while (false !== ($file = readdir($handle)))

经过

$files = scandir($path);
uasort($files, 'sort_by_filemtime');
foreach ($files as $file) {
    ...

并在脚本开头声明如下回调函数

function sort_by_filemtime($file1, $file2) {
    global $path;
    $file1mtime = filemtime($path.$file1);
    $file2mtime = filemtime($path.$file2);
    if ($file1mtime == $file2mtime) {
        return 0;
    }
    return $file1mtime > $file2mtime ? 1 : -1;
}
于 2012-11-27T15:38:48.417 回答