1

私のプロジェクトでは、それぞれの製品ごとに、画像(ユーザーがアップロードしたもの)をフォルダーに保存します。

たとえば、製品を追加するために、フォームがユーザーに表示されます。ユーザーは製品の詳細を入力し、自分のコンピューターからいくつかの画像を選択します(5枚以上の写真)。送信されると、製品の詳細を。というテーブルに保存しますProducts。アップロードされた画像の場合、次のようなフォルダを作成します。これhttp://mysite.com/uploads/123/123、新しく追加された製品の製品IDです。そして、すべての画像がその中に保存されます。

質問:

  • 後で表示するためにアップロードされた画像(またはそのファイル名)を追跡する方法は?つまり、新製品が追加されると、私のスクリプトは派手なuriテキストを作成します。例:http://mysite.com/this-is-my-new-product。したがって、ユーザーがこのリンクにアクセスすると、その製品に属するすべての画像が表示されます。このために、製品IDとファイル名を含む別のテーブルを保持する必要がありますか?そして、このテーブルにクエリを実行し、そこからファイル名をエコーし​​ますか?または、フォルダをスキャンして(例http://mysite.com/uploads/123/*.jpg:)、画像を1つずつエコーするのは良いことです。別のテーブルを使用せずに?

  • 画像のファイル名に派手なURIを使用しても大丈夫ですか?例:/uploads/123/this-is-my-new-product1.jpg、、、/uploads/123/this-is-my-new-product2.jpgなど/uploads/123/this-is-my-new-product3.jpg?したがって、ユーザーには最初の画像のパスがとして表示されhttp://mysite.com/uploads/123/this-is-my-new-product1.jpgます。これは物理アドレスです。それはSEOに役立ちますか?それとも悪い習慣ですか?これが良ければ、すべての画像を一覧表示するには、scanddir()を使用する必要がありますか?

正しい道を案内してください。ありがとう

4

2 に答える 2

1

1.iは、製品IDを持つ画像ファイル名を保存するための別のテーブルを作成することをお勧めします。

2.画像​​ファイル名の場合、元のファイル名と一緒に一意のランダムな名前を使用するか、PHPのuniqidを使用してファイル名を生成するか、タイムスタンプを使用してファイルに名前を付けることができます。画像名がmyimage.jpgの場合、23208349984_myimage.jpgとして保存することをお勧めします。

于 2012-08-06T10:38:05.703 に答える
0

あなたが言うように、あなたはデータと画像の間にいくつかのリンクが必要であるか、またはフォルダをスキャンしてあなたが見つけたものを出力する準備ができているかのどちらかです。後者は計算コストが高く、アプローチとして完全に優雅ではありません。

妥協案は、アップロードされた画像の名前を1.jpg、2.jpgなどに変更してから、アップロードされた画像のだけDBにログインすることです。例:

if ($res = $db->query("query to get product row here")) {
    $row = $res->fetch_assoc();
    if (isset($row['num_imgs'])) {
        for($i=0; $i<$row['num_imgs']; $i++) {
            $img_path = $product_folder_uri."/".($i+1).".jpg";
            if (file_exists($img_path))
                echo "<img src='".$img_path."' />";
        }
    }
}

アップロードされた名前から画像の名前を変更したくない場合は、おそらく独自のテーブルと製品テーブルへの外部キーを介して、DBに画像の名前を記録する必要があります。

最後のオプションは、画像をブロブとしてデータベースに保存することですが、私はDBの専門家ではないため、これがどれほど普及しているか、または推奨されているかわかりません。

于 2012-08-06T10:36:13.273 に答える