私も同じ問題を抱えてる。現在、私は2つの方法を見つけました:
1) base64_encode() + ajax + js/jquery
- base64_encode() によってエンコードされたすべての画像を、バイナリ ファイルまたはデータベースの OUTSIDE www フォルダーに保存します。
- ajax を使用してそのデータを取得します。「data:image/jpeg;base64,$enc_imgbinary」を返す必要があります
- js/jquery を使用して、「img」属性の「src」を返された結果に置き換えます
長所
短所
- ビデオの同様のソリューションが見つかりませんでした。
- サーバーのCPU使用率を最小限に抑えるために、画像は事前に(または最初の使用時に)エンコードする必要があります。
- エンコードされた画像は、ディスク上で約 30% 多くのスペースを必要とします => 1.3 倍のディスク スペース
- 元の画像をサーバーに保持したい場合 => 2.3x のディスク容量。
- ~30% 多くのデータがネットワーク経由で送信されます
2) 長いランダム名 (+シンボリックリンク)
A) 長いランダムな名前を使用して画像を www フォルダーに保存する
B) www フォルダーへのシンボリック リンクを使用して画像を www フォルダー外に保存する。(www 以外の画像もデスクトップ画像のバックアップとして機能します)
ノート:
- フォルダーにはランダムなシンボルも含まれている必要があります
- 使用する '。' フォルダーまたはファイル名の前 => 念のため、未構成の apache でフォルダーの内容が表示されないようにするため
- ケース B) でシンボリックリンクをたどるように Apache を構成します (FlowSymlinks を httpd.conf に追加します)。
- フォルダーの内容が一覧表示されないように apache を構成します (httpd.conf からインデックスを削除します)。
画像階層の例:
- www
- .media_jmdue7jed
- .user1_hash_!sdfsewewfsdfsds
- .album1_name_!jfie8e7y77667fef
- .photo1_name_!kjio9i890v8fsd978fyreshf
- .photo2_name_!09098dfuujdsif87s7ysdffd
- ...
- .album2_name_!ghhyuflp!huidfjh
- .photo1_name_!feojihudhufuuhfrufhi8484
- .photo2_name_!2344gfdgfdgdfefedw232sdg
- ...
- .user1_hash_!j333re89dsfdsf
長所:
- 動画にも使える
- 長いランダム名を使用して www フォルダーへのシンボリック リンクを作成することにより、元の画像を www フォルダーの外部に元の名前で保持することができます。ユーザーごとに異なります。
- 画像はサーバー外で使用できます(フォーラムでは、直接リンクを友人などにすばやく送信できます)
短所
- シンボリックリンクは事前に (またはその場で) 作成する必要があります
- 画像は直接リンクでアクセスできます
- ただし、それを推測することはほとんど不可能です
- また、シンボリックリンクのランダム名を定期的に、または画像の権利が変更されたときに変更することもできます(私はgoogle +がそうしていると思います)
- map original-name → long-random-name は db (または sidecard/meta ファイル) に保存する必要があります
- (エンコード/デコードまたは元の名前 + 長いランダム名を組み合わせることによって、元の名前を長いランダム名内に保持する場合はバイパスできます)
=====================================
ケース 1) を実装しましたが、問題なく動作しましたが、HTML5 ビデオの同様のソリューションは見つかりませんでした。
ケース 2) はより柔軟に見えます。しかし、私はまだセキュリティについて確信が持てません。誰かがセキュリティ ホールを見たら、私に知らせてください。