0

私は Web サイトを作成しました。その上で、ユーザーはプロファイルから後でアクセスできるさまざまなファイルをアップロードできます。時間が経つにつれて、ユーザー用のフォルダーとサブフォルダーを作成するこの方法は非常に面倒であることに気付きました。より多くのユーザーが私の Web サイトに参加して使用するにつれて、非常に多くのフォルダーとサブフォルダーが作成されるためです。私は今、すべてのファイルに対して 1 つのフォルダーを用意することを考えていますが、ユーザーのファイルの名前をオンザフライでUSERID-FILENAME.

問題は、ファイルを特定のユーザーに表示したいときに発生します。フォルダー内のファイルを検索して、特定のユーザー ID で始まるファイルを取得します。たとえば、ユーザー ID が 200 の場合、最初のハイフンの前に 200 を持つすべてのファイルを取得して表示します。

どうすればこれを達成できますか?また、使用するのに最適な方法はありますか?

4

2 に答える 2

0

おそらくこのようなもの:

foreach (glob( ((int)'$userid')'-*') as $file) {
    process($file);
}
于 2013-06-25T21:01:02.343 に答える
0

おそらく、サイトが大幅に成長した場合にスケールしにくいファイルシステムではなく、データベースやキー値ストアのようなものが必要になるでしょう。

たとえば<userid>-<filename>、ファイルの内容を値として設定し、バイナリ blob としてエンコードして、key-value ストアのキーのようなものを使用できます。

これに加えて、ユーザーがこれまでにアップロードしたすべてのファイルを追跡する記述子が必要になる場合があります。おそらく、ユーザー ID または次のようなものによって直接キーが付けられます。<userid>-files

<userid>-files次に、ユーザーを検索するときは、最初に記述子をロードし、これを使用してアクセス/制御/所有するファイルのリストを表示<userid>-<filename>し、特定のファイルを要求したときに検索します。

これについてもう少し考えてみると、ユーザーが同じファイルを複数回アップロードするケースを処理するには不十分かもしれません。ファイル自体に ID を割り当てて、それらの ID を<userid>-filesblob に保持したい場合があります。これには、ファイルを保存するためのスキーマがユーザーに依存しないという追加の利点があるため、共有機能を実装するためにサービスを拡張し始めることができます (おそらく、共有/アクセス制御プロパティを記述する別のデータの塊を使用して)。

于 2013-06-25T21:06:49.270 に答える