2つ下のアクセス制限でも質問していますが、圧縮ファイルのダウンロードについて、ログインで認証を与えられた人物以外にはダウンロード不可としたいのですが、phplibで実現させる方法が分かりません。
自分で調べた限りでは、ページの表示に対する制限などはかけられるみたいですが、圧縮ファイルなど、プログラムの書けないファイルへの制限方法が分かりません。
phplibでの制限方法が分からなかったので、代わりの方法としてダウンロードしたいファイルのアクセス権を所有者として、ログインが成功した時点でApacheのユーザーをnobodyから所有者に変更するなど考えて見たのですが、うまくいきません。
良い方法をご存知の方、教えて頂けないでしょうか?
No.4ベストアンサー
- 回答日時:
$file=i18n_convert($file,SJIS);
> header("Content-Disposition: inline; $filename=\""."pack.exe"."\"");
これはタイポてすか?
filenameが$filenameと変数になっています。
もしタイポじゃないのであれば、これが名前がおかしい原因かも
> header ("Content-Length: $fs");
私はこの記述が抜けていましたね(^^;
> $fp=fopen($file,"rb");
> @fpassthru($fp);
> fclose($fp);
> exit;
この記述の意味が分かりません。なぜ、新たなファイルに書き込んでいるのでしょう?
後細かいことですが、fpassthru()を利用するのであれば、クローズしなくて良かったような気がします。
まずはこの辺りを見直してください。
kusukusuさん ありがとうございます。
無事、解決しました。
$filenameの記述は、確かに見落としていました。
ファイル名の問題は、$を取るだけで解決しました。
ファイルの破損は、fclose($fp)を削除する事で、正しくダウンロードされました。
元となったソースに付いていたので、てっきり必要と思って、自分で調べるのを疎かにしていました。
fopenの記述を行ったのは、これを入れないと、0バイトファイルとしてダウンロードされた為です。
結局最後まで、kusukusuさんに助けて頂いて、どんなに感謝してもし足りません。
本当にありがとうございました。
No.3
- 回答日時:
> タグの<A HREF="http~
> のアドレス部分に、$fileを直接貼るわけにもいかないと思いますし
これは私がNo1で書いたdownload.phpで制御することです。
凄く簡単な一例を挙げると、
function download_file($file) {
header("Content-Disposition: inline; filename=\"".basename($file)."\"");
header("Content-Length: ".$content_length);
header("Content-Type: application/octet-stream");
}
とダウンロードする関数を作り(多分何度も同じ行為をすると思うので、関数化した方がいいですよ。)必要なファイルを呼び出します。
$path="/home/user/file";
(snip)
$file=$path."/hogehoge.txt";
download_file($file);
と言った感じです。
この回答への補足
kusukusuさん 何度もすみません。
教えて頂いたコードを元に、色々調べてみました。
それで、後少しの所まで来ていますが、2点問題が発生します。
1.ダウンロードしたファイルが、PHPのファイル名としてダウンロードされる
2.ダウンロードしたファイルが破損している
元ソースは、他のカテゴリに似た物があったので、それを使用しました。
ダウンロードするファイルは、pack.exeと言う自己解凍の圧縮ファイルです。
PHPのファイルは、download.phpと言うファイルで、以下のコードのみ記述しています。
ファイルの保存は出来る様になったのですが、ファイル名がdownload.phpとなり、ダウンロード後にpack.exeにリネームしても、実行時にエラーになります。
ファイルサイズから考えて、pack.exeをダウンロードしているのは間違い無いみたいです。
ちなみにブラウザは、IE5.5 SP2を使用しています。
記述方法に謝りがあれば、ご指摘下さい。
-------------------------------------------------------------
$file = "/usr/local/pack.exe";
$file=i18n_convert($file,SJIS);
$fs=filesize($file);
//header("Content-Disposition: inline; $filename=\"".basename($file)."\"");
header("Content-Disposition: inline; $filename=\""."pack.exe"."\"");
header("Content-Type: application/octet-stream");
header ("Content-Length: $fs");
$fp=fopen($file,"rb");
@fpassthru($fp);
fclose($fp);
exit;
-------------------------------------------------------------
No.2
- 回答日時:
> pacheの方も、まだまだ勉強不足で、サーバー側の設定が必要な気がしています。
サーバーの設定は必要ありません。
パスを絶対パスで指定してあげればいいだけです。
$path="/home/user/file";
(snip)
$file=$path."/hogehoge.txt";
と言った感じです。
この回答への補足
kusukusuさん 素早い回答ありがとうございます。
>パスを絶対パスで指定してあげればいいだけです。
>$path="/home/user/file";
>(snip)
>$file=$path."/hogehoge.txt";
確かに、PHPの内部でファイルの読み込みを行う際は、大丈夫だと思いますが、正式にログインした人が、ファイルをダウンロードしたい場合は、どの様にリンクを貼ったら良いのでしょうか?
タグの<A HREF="http~
のアドレス部分に、$fileを直接貼るわけにもいかないと思いますし、何度も申し訳ありませんが、宜しくお願いします。
No.1
- 回答日時:
ようは、直接ファイルにアクセスされたくないと言うことですよね?
この場合は、DLさせるファイルを、httpdの範囲外のディレクトリに置きます。
例:
/home/user/public_html をドキュメントルートとすると、
/home/user/file
の様に、public_htmlの外にディレクトリを作る。
そうしておけば、ファイルに直接アクセスされるおそれはありません。
download.php等の認証済みユーザーしか開けないファイルを作り、そこから上記 files/以下のファイルにアクセスするようにすればOKです。
この回答への補足
kusukusuさん 回答ありがとうございます。
それで、もう少し教えて欲しいのですが、ドキュメントルートの外にファイルを格納した場合、そのファイルへのアドレスはどの様に指定したら良いのでしょうか?
普通にアドレスを指定しても、ドキュメントルートの外ではアクセス出来ません。
Apacheの方も、まだまだ勉強不足で、サーバー側の設定が必要な気がしています。
ポイントだけでも教えて頂ければ、自分で調べて見ようと思いますが、今のところ、どこから調べて良いか、検討が付きません。
初心者の質問で申し訳ありませんが、宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- ドライブ・ストレージ 家庭用のNASについて 2 2022/07/05 18:30
- Google Drive Googleスライドについて 1 2023/05/01 00:11
- Excel(エクセル) Excelで、社外秘(閲覧のみ)と表示され、共有者が編集出来ないのですが 4 2023/06/20 17:54
- その他(パソコン・スマホ・電化製品) ウイルスバスターの制限解除方法 1 2022/08/09 22:08
- Visual Basic(VBA) Excelのマクロについて教えてください。 作業フォルダ内に2つのファイルがあります。 このファイル 2 2023/07/09 13:40
- 法人税 電子帳簿保存法について 1 2022/04/07 11:17
- Google Drive Googleマイドライブの共有”リンクを知っている全員”の期限設定 1 2023/01/19 10:33
- 電子書籍 ファイルピックについて 1 2022/08/07 00:07
- その他(コンピューター・テクノロジー) FPGA構成データ、ソフトウェアデータ をボード Zybo Z20 用に転送する方法 1 2023/07/25 18:19
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【PHP】ダウンロードサイト作成...
-
eclipseでコメントアウトができ...
-
ExcelとPHPについて・・・
-
PHP 検索結果のCSVダウンロード
-
PHP ダウンロードサイトの直リンク
-
ダウンロードファイル名の文字...
-
【BAT(バッチ)ファイル】Web...
-
フォントの色を変えるには?
-
AccessのDoCmd.SendObjectについて
-
.phpと.incファイルの違いはな...
-
FTPコマンドでディレクトリごと...
-
リンク先を隠す方法はないでし...
-
【file_exists】ファイルが存在...
-
セッションのクッキー有効期間...
-
配列とオブジェクトの違い
-
VBAでJPGサイズ変更
-
複数のファイルで同じ定数を定...
-
SHGetSpecialFolderLocation
-
Subversionのリポジトリの削除
-
別ファイルの変数を呼び出した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで複数ファイルのダウン...
-
ファイル一覧を表示しその画面...
-
zip圧縮の種類について
-
eclipseでコメントアウトができ...
-
ブラウザでExcelをダウンロード...
-
複数ファイルを連続でダウンロード
-
phpでzipファイルダウンロード...
-
libxml2のインストール
-
PHPでファイルのダウンロードす...
-
CSV出力時の”0”表示(電話番号...
-
PHPでダウンロードしたファイル...
-
phpでうまく画像がダウンロード...
-
wgetの使い方
-
Excelファイルをダウンロード
-
サーバー上のファイルをブラウ...
-
日本語ファイル名のアップロー...
-
ファイルのダウンロードのイベ...
-
ダウンロードファイル名の文字...
-
ファイルへの直接アクセスをで...
-
動画をダウンロードするとサイ...
おすすめ情報