私は自分のサイトの「プレミアム」セクションを構築しており、特別な権限を持つユーザー(mysql dbに保存されているアカウント)に、リモート(別のサーバー上)のファイルへのダウンロードアクセスを直接与える必要があります。私のサイトは php/mysql でコーディングされているので、php ソリューションは素晴らしいでしょう。
4 に答える
すべてのダウンロード リンクを、すべての資格情報のチェックを行う php ファイルに転送します。
ファイルdownload.phpを呼び出すことができます
Cookie、get、post、session、または権限を確認する方法でパラメーターを渡します。
資格情報が確認されたら、適切なヘッダーを送信できます。
画像の場合、ヘッダーはheader("Content-type: image/jpeg");
あなたもこのリモートサーバーを所有していると思います。
いくつかの便利なリンク:
@pxlが言ったように、承認を確認してから、正しいMIMEタイプをHTMLヘッダーとして出力する必要があります(彼が言ったようにheader("Content-type: image/jpeg");
:)
また、それが完了したら、ファイルの実際の内容とそのサイズ (バイト単位) を次のように出力する必要があります。
header("Content-Length: ".filesize("FILENAME")*1.001);
/* The *1.001 puts a nice buffer on the filesize, I read about it online.
Browsers will stop downloading exactly at the Content-Length, but if they go
over, it's not a big deal at all. */
readfile("FILENAME");
die();
Web からアクセスできないディレクトリにファイルを保存してください。
これが私がすることです:
ファイルを保持するリモートサーバーBにPHP-SOAP-Severを構築しました。
ユーザーがメインサーバーAでダウンロードをトリガーするたびに、BのSOAPサーバーに接続し、ダウンロードするファイルのIPアドレスとID/パスを指定するユーザーのチケットを予約します。
サーバーBは、このダウンロードのticketId(限られた時間のみ有効である必要があります)を作成し、Aに返します。
サーバーAは、ユーザーをサーバーBにリダイレクトし、GETパラメーターとしてticketIdを提供します。
サーバーBは、チケットがすでに使用されているか、有効期限が切れているか、またはユーザーが間違ったIPから来ているかどうかをチェックするようになりました。いずれも当てはまらない場合は、ファイルを提供し、チケットに使用済みのマークを付けます。
注:サーバーBでは、ファイルの提供中にPHPを実行し続けるのではなく、代わりにX-Sendfileヘッダーを使用してください。そうしないと、PHPの最大実行時間後にダウンロードが停止する可能性があります。
私はこれが組み込まれているASP.NETでこれを行うことに慣れていますが、この記事はあなたの正確な状況を記録しているようです.