アップロードされたファイルを整理して名前を付けるための最良の方法は何ですか?
私はこれについて間違っているかもしれませんが、ファイルを参照する必要がある場合にファイルシステムの速度が低下するため、すべてのファイルを1つのディレクトリに保存することはお勧めできません。
すべての考えやアイデアを歓迎します
乾杯
アップロードされたファイルを整理して名前を付けるための最良の方法は何ですか?
私はこれについて間違っているかもしれませんが、ファイルを参照する必要がある場合にファイルシステムの速度が低下するため、すべてのファイルを1つのディレクトリに保存することはお勧めできません。
すべての考えやアイデアを歓迎します
乾杯
このような関数を使用して、アップロードされたファイルの3レベルのフォルダーのツリーを生成します。
function get_1000_path($id)
{
$id = strval($id);
$id = str_repeat("0", 9 - strlen($id)).$id;
$path = substr($id, 0, 3)."/".substr($id, 3, 3)."/".substr($id, 6, 3)."/";
return $path;
}
したがって、1つのサブフォルダー内のファイルの最大数は1000であり、ファイルシステムは正常に機能します
アプリケーションがどのように機能しているかによって異なります。
ユーザーギャラリーのようなものであれば、ユーザーごとに1つのフォルダーを作成し、次に年->月の構造を作成します。
ファイルがすべてのユーザーによって共通に共有されている場合、時間に基づいて異なるディレクトリにファイルを整理します(年->月->週->日)。あなたのサイトが多くのトラフィックを期待していない場合は、1年->月の分割で十分です。
uniqid()関数を使用して、アップロードされたファイルの名前を変更し、上書きや重複をチェックする必要がないようにします。
システム/サイトまたはニーズに依存すると思います。ユーザー ポータルの場合は、このようにするとよいでしょうuser_images/USER-ID/filename-unid_id.jpg
。たとえば、これはuploads/news_images/YYYY/MM/DD/filename-unid_id.jpg
ニュース サイトに役立つタイプです。この時点で、md5 などの大きな unid_id は必要なく、phphash
などを使用できます$unid_id = hash('crc32b', microtime())
。強硬な衝突の可能性があるからです。
// in your upload file
$dir = "uploads/news_images/". date("Y-m-d");
if (!is_dir($dir)) {
mkdir($dir, 0777, true);
if (!is_writable($dir)) chmod($dir, 0777); // try again changing mod
}
ただし、どちらの例でも、各ファイルのファイル名/パスを保存する必要があります。このようにして、このメソッドを使用してデータを保存します(個人的には、多くのデータをまとめて保存する場合、および検索する必要がない場合は json 形式を使用します)。
// table "news_images"
id | file_name | file_data
--------------------------
1 | blue fish | {"path":"2012/12/12", "slug":"blue-fish-9834a12b", "ext":"jpg" ...
頑張って..