0

約 100 個のサブディレクトリ (ネストされ、3 ~ 4 の深さ) を持つディレクトリがあります。最近追加された(またはすべてpdfであるため変更された)11個のファイルのリストを単純に出力する小さなPHPスクリプトが必要です。各ファイル<br />はそれぞれのURLにリンクされています。

1つまたはすべてを実行できるスクリプトをいくつか見つけましたが、具体的に11に制限し始める方法や、正確なhrefを適用する方法さえわかりません。

私の別の懸念は、このスクリプトのサーバーでの使用です。これは、使用率が低いランディング ページに配置されるためですが、すべてのユーザーが表示されます。

調べるリソース、または開始する場所に関するアイデアをいただければ幸いです。

4

4 に答える 4

3

テストされていませんが、動作するはずです:

<?php

function getFiles($dir)
{
    $arr=scandir($dir);
    $res=array();
    foreach ($arr as $item)
    {
        if ($item=='..' || $item=='.'){continue;}
        $path=$dir.'/'.$item;
        if (is_dir($path))
        {
            $res=array_merge($res,getFiles($path));
        }
        else
        {
            $res[$path]=filemtime($path);
        }
    }
    return $res;
}

$files=getFiles('directory');
arsort($files);
$files=array_slice(array_keys($files),0,11);
foreach ($files as $file)
{
    echo '<a href="'.$file.'">'.$file.'</a><br />';
}
?>
于 2012-06-11T17:38:35.690 に答える
1

Web ベースのアップロード インターフェイスを提供する方が理にかなっています。そうすれば、新しいアップロードごとに追跡することができます。

  • ユーザーがカテゴリを選択します (各カテゴリ/サブカテゴリはフォルダーにマップされます)
  • ファイルをサーバーにアップロードする
  • スクリプトは、テーブル行の各ファイル名、場所、日付をダンプします

終わり。最新の 11 ファイル (システム全体または特定のカテゴリ/フォルダー内) を取得するには、クエリ データベースのみが必要です。

ユーザーがファイルを削除する機能も必要な場合は、その機能用の Web インターフェイスも追加してください。ファイルを削除する代わりに、テーブルで「非表示」としてマークするだけです。

当面の問題を解決するだけでなく、モデレーション、所有権の帰属、検索などの追加の可能性も提供します。

于 2012-06-11T18:05:10.047 に答える
0

RecursiveIterator を使用します。これが設計されたものです。SPLHeap を拡張する sortedIterator という名前のイテレータを追加して、dir の変更時刻である getMTim​​e() で並べ替えました。

$path をディレクトリへのフル パスに変更します。

$path = '.';

class sortedIterator extends SplHeap
{
    public function __construct(Iterator $iterator)
    {
        foreach ($iterator as $item) {
            $this->insert($item);
        }
    }
    public function compare($b,$a)
    {
        return strcmp($a->getMTime(), $b->getMTime());
    }
}

    $recursive = new RecursiveDirectoryIterator($path);
$sortByTime = new sortedIterator($recursive);
$i = 0;
foreach ($sortByTime as $file) {
        if($file->isDir()){
                $dirs[] = $file->getFilename();

                if($i++ == 9){
                        break;
                }
        }
}

print_r(implode("<br />", $dirs));

編集、Created Time が必要な場合は、getMTim​​e を getCTime に変更します。

于 2012-06-11T18:13:54.553 に答える
-1

それらすべてをリストするコードを使用しますが、出力する前に、usort呼び出しを使用して変更時間を短縮してファイルをソートします。次に、ループは次のように開始する必要があります。

$l = count($fileArray);
for( $i=0; $i<11 && $i<$l; $i++) {
    // output file entry
}
于 2012-06-11T17:32:04.790 に答える