回答:
私は使用しないようにアドバイスします
administrator/components/com_mycomponent/invoices
これは.htaccess
、管理者ディレクトリでを使用すると問題が発生する可能性があるためです。たとえば、Akeeba管理ツール
メディアフォルダーも使用したいと思います。
次のような適切な元の名前でハッシュファイルを提供することもできます。
<?php
header("Content-type:application/pdf");
// It will be called NICE_TITLE.pdf
header("Content-Disposition:attachment;filename='NICE_TITLE.pdf'");
// The PDF source is in HASHED_FILE.pdf
readfile("HASHED_FILE.pdf");
?>
これはあなたの質問に直接答えないかもしれませんが、この質問について別の見方をしたいと思います。
私がしようとするだろうあなたが生成できる可能性が収納書類限り避けます。理由:後で変更するのが難しいフォルダー名/ファイル名を決める必要があります。スペースを使いすぎて、セキュリティ上の問題が発生する可能性があります。
もちろん、これはアプリケーションの動作に依存しますが、理想的には、データベーステーブルに請求書データを入れ、必要に応じてオンザフライで請求書を生成します。
私の2セント。
id
なくユーザーに関連付けます。発電時には、あなたがし合っているでしょうid
に対するテーブル内id
での#__users
ユーザー名または完全な名前を取得するにはテーブルと、それはサーバースペースの地獄の量節約のように)全体的に私はずっとこの方法を好む
ユーザーが生成したファイルをコンポーネントディレクトリに保存しないでください。コンポーネントの更新中に(適切に行われなかった場合)、またはユーザーがコンポーネントをアンインストールしたときに、それらを失う可能性があります。
そのようなファイルを保存する正しい場所は、実際には「イメージ」フォルダです。これは、ユーザーがメディアマネージャを使用してファイルを簡単に管理できる場所です。「メディア」フォルダも実行可能な選択肢の1つですが、実際にはCSS、JSなどの拡張アセットを保持するためのものです。
ただし、ファイルに誰にも公開されてはならない機密データが含まれている場合は、これらのフォルダーに保存することはお勧めできません。あなたがそれらをハッシュしたとしても、誰かが最終的にそれらを読むことができると確信することができます。
安全にする必要がある場合は、ファイルをまったく保存せず、要求に応じて動的に生成します。または、webrootの外に保存し、PHPを使用してアクセスします。他に安全な方法はありません。
You may end up loosing them during an update of your component
>>更新スクリプトで指定しない限り、ディレクトリに保存されているファイルは削除されないと思います。アンインストールに同意する
次のディレクトリをすべての請求書のルートとして使用しても問題ありません。
administrator/components/com_mycomponent/invoices
ただし、請求書が生成されたら、ファイル名をハッシュ化することをお勧めします。そのようです:
administrator/components/com_mycomponent/invoices/HASHED_FILE.pdf
または、請求書ごとに、ハッシュされたディレクトリを作成し、次のようにPDFをそこに保存します。
administrator/components/com_mycomponent/invoices/HASHED_DIR/file.pdf
更新:
この方法を選択した場合、htaccessファイルを使用して直接アクセスを防止し、PHPによるこれらのPDFファイルへのアクセスのみを許可できます。
PHP駆動型のダウンロードの場合、ユーザーのIDとともに、ハッシュをデータベースの表形式で保存することをお勧めします。ファイルのダウンロードがリクエストされたときに、保存したIDと現在ログインしているユーザーのIDを照合し、データベースに保存されているハッシュと照合することができます。
images
、media
またはwebroot外のフォルダを使用します。
私にとって、その目的に最も適したメディアフォルダ。直接アクセスを制限するには、以下の内容で.htaccessファイルをフォルダーに作成します。
DENY FROM ALL