perl-特定の日時のディレクトリ内のファイルをPHPで表示
PHPでファイルディレクトリを検索し、期間内にファイルのリストを返すための最良の方法を見つけようとしています。ファイル名にはタイムスタンプが付いていますが、この方法を使用すると、結果を取得するためにすべてのファイルをループする必要があります。フォルダごとに80,000を超えるファイルがあります。これはリソースを大量に消費します。
これを行うためのPHPの組み込み関数はありますか、それともこれを行うのに最適なものは何ですか?
ありがとう
編集: perlのようなバックエンドスクリプトを呼び出して、結果をPHPに返す方が効率的でしょうか。
答え :
解決策:
これを試してください:
function getFilesByTime($folder, $from, $to, $format){
$contents = scandir($folder); $a = array();
foreach($contents as $f){
if(is_file($f)){
$ft = filemtime($f);
if($ft >= strtotime($from) && $ft <= strtotime($to))$a[$f] = date($format, $ft);
}
}
return $a;
}
print_r(getFilesByTime('wherever', '10/15/2005', 'now', 'F d, Y H:i:s'));
答え :
解決策:
これは、RAMを大量に消費することなく、非常に簡単に実行できます(何らかの理由ですべてのファイルを読み取る必要がある場合を除く)。私はこの種のソフトウェアを何度も実行しましたが、うまく機能します。
opendir
を使用して、調べたいディレクトリを開きます。
次に、ループ内で readdir
を使用して、ファイルの名前を1つずつ読み取ります。 readdir
は、ファイルシステムのディレクトリオブジェクトに保存されているのと同じ順序でファイルを処理します。これは、ファイル名を並べ替えようとしないため、言及したディレクトリと同じ大きさのディレクトリに役立ちます。 ( scandir
という別のAPIがあります。このAPIはファイル名を並べ替えます。多ファイルアプリケーションでは使用しないでください。)
readdir
を呼び出すたびに、ディレクトリ内の次のファイルのファイル名が表示されます。これがドキュメントです。例は役に立ちます。 http://www.php.net/manual/en/function.readdir.php
各ファイル名を取得したら、 stat
を使用してファイルのさまざまな属性を効率的に検索できます。 http://www.php.net/manual/en/function.stat.php これにより、作成時間、長さ、所有者などの便利な情報がわかります。
* nixシステム(BSDやLinuxなど)を使用している場合は、を使用して、ファイルをコピーせずに同じファイルシステム上の別のディレクトリにすばやく移動できます。 link
、次に un link
。 un link
しただけで、削除されます。
ここで覚えておくべきことの1つは、 readdir
がファイル名を正式に予測できないまたはとして返す順序を扱う必要があることです。 >ランダム。それらは、特定の順序であることが保証されていません。リモート(NFS)ファイルシステムは、私が使用したいくつかの環境でローカルファイルシステムとは異なる順序を処理したため、私はこれに巻き込まれました。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。