2017-08-14 7 views
0

LinuxでPHP 5.6を使用しています。私はファイル名の配列を加えた更新日時とサイズを取得するには、次のような何かを行うことができます知っている変更された日付とサイズのファイルの大きなリストを取得する実行方法

ディレクトリに
$directory_listing = scandir($path); 

をファイルとディレクトリのリストを取得しています。

$listings_final = array(); 
foreach ($directory_listing as $listing) { 
    $listings_final[]['listing_name'] = $listing; 
    $listings_final[]['listing_modified'] = filemtime($listing); 
    $listings_final[]['listing_size'] = filesize($listing); 
} 

ファイルの数が非常に多い場合、これは遅くなります。これをアーカイブするより効果的な方法がありますか?

+0

おそらく、 'ls'でも一括してではなく、すべてのデータをエントリ(ファイル/ディレクトリ)ごとに反復して取得するためです。しかし、なぜその情報を取得しているのか、アプリケーションにどのように必要なのかによって、UIの速度を落とさない別の方法があるかもしれません。 –

+0

@NickCoonsカスタマイズされたディレクトリリストとファイル表示システムを構築しています。 – Goose

+0

あなたがしたいことは、元のディレクトリリストを取得し、それをユーザーに表示させるためにUIに送信してから、バックグラウンドでメタデータ(タイムスタンプやサイズなど)を非同期で入力することです。 –

答えて

1

ファイルシステムにアクセスする際、各ファイルのメタデータはファイル単位で取得され、バルク形式では取得されません。 lsのような比較的低レベルのツールでさえ、このようにします。したがって、ディレクトリに10,000個のファイルがある場合、すべてのファイルのメタデータを取得するために10,000回の呼び出しを行うことはありません。一度にすべてを得ることを目的としたツールがあるかもしれませんが、情報を得るためにディレクトリ内のすべてのファイルをループしているという事実を抽象化しています。

これを行うために私が知っている唯一の方法は、この情報のためにファイルシステムに直接アクセスするものを作成することです。しかし、それはあなたのアプリケーションを特定のファイルシステム(ext4など)に依存させるので、お勧めできません。

あなたの最善の策は、ディレクトリの最初のファイルリストを取得して、それを素早く行うことができるためです。その後、非同期で各ファイルのメタデータを取得し、アプリケーションにデータを取り込みます。このようにして、ユーザーはすべてのメタデータが読み込まれるまで待つことなく、アプリケーションとのやりとりを開始できます。

関連する問題