• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:phplibの権限について)

phplibの権限について

このQ&Aのポイント
  • phplibを使用して圧縮ファイルのダウンロード制限を実現したいが方法が分からない
  • ページの表示には制限がかけられるが、プログラムの書けないファイルへの制限方法が不明
  • ダウンロードしたいファイルのアクセス権を所有者として、ログイン時にApacheユーザーを変更する方法を試してもうまくいかない

質問者が選んだベストアンサー

  • ベストアンサー
  • kusukusu
  • ベストアンサー率38% (141/363)
回答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()を利用するのであれば、クローズしなくて良かったような気がします。 まずはこの辺りを見直してください。

ztkun
質問者

お礼

kusukusuさん ありがとうございます。 無事、解決しました。 $filenameの記述は、確かに見落としていました。 ファイル名の問題は、$を取るだけで解決しました。 ファイルの破損は、fclose($fp)を削除する事で、正しくダウンロードされました。 元となったソースに付いていたので、てっきり必要と思って、自分で調べるのを疎かにしていました。 fopenの記述を行ったのは、これを入れないと、0バイトファイルとしてダウンロードされた為です。 結局最後まで、kusukusuさんに助けて頂いて、どんなに感謝してもし足りません。 本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • kusukusu
  • ベストアンサー率38% (141/363)
回答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); と言った感じです。

ztkun
質問者

補足

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; -------------------------------------------------------------

全文を見る
すると、全ての回答が全文表示されます。
  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.2

> pacheの方も、まだまだ勉強不足で、サーバー側の設定が必要な気がしています。 サーバーの設定は必要ありません。 パスを絶対パスで指定してあげればいいだけです。 $path="/home/user/file"; (snip) $file=$path."/hogehoge.txt"; と言った感じです。

ztkun
質問者

補足

kusukusuさん 素早い回答ありがとうございます。 >パスを絶対パスで指定してあげればいいだけです。 >$path="/home/user/file"; >(snip) >$file=$path."/hogehoge.txt"; 確かに、PHPの内部でファイルの読み込みを行う際は、大丈夫だと思いますが、正式にログインした人が、ファイルをダウンロードしたい場合は、どの様にリンクを貼ったら良いのでしょうか? タグの<A HREF="http~ のアドレス部分に、$fileを直接貼るわけにもいかないと思いますし、何度も申し訳ありませんが、宜しくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.1

ようは、直接ファイルにアクセスされたくないと言うことですよね? この場合は、DLさせるファイルを、httpdの範囲外のディレクトリに置きます。 例: /home/user/public_html をドキュメントルートとすると、 /home/user/file の様に、public_htmlの外にディレクトリを作る。 そうしておけば、ファイルに直接アクセスされるおそれはありません。 download.php等の認証済みユーザーしか開けないファイルを作り、そこから上記 files/以下のファイルにアクセスするようにすればOKです。

ztkun
質問者

補足

kusukusuさん 回答ありがとうございます。 それで、もう少し教えて欲しいのですが、ドキュメントルートの外にファイルを格納した場合、そのファイルへのアドレスはどの様に指定したら良いのでしょうか? 普通にアドレスを指定しても、ドキュメントルートの外ではアクセス出来ません。 Apacheの方も、まだまだ勉強不足で、サーバー側の設定が必要な気がしています。 ポイントだけでも教えて頂ければ、自分で調べて見ようと思いますが、今のところ、どこから調べて良いか、検討が付きません。 初心者の質問で申し訳ありませんが、宜しくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • APACHEで画像BASIC認証以外でアクセス制限するには?(PHPやperlで)

    こんにちは, タイトルどおり,現在webページを作成しているのですが,.gifや.pngファイルにアクセス制限をしたいのです。ただ,サーバースクリプトなどを使用してもいいので,BASIC認証以外で制限をしたいのですが,それは可能なのでしょうか。 ちなみに,OSはLinuxでサーバーはApacheを使用しています。また,PHPLIBとPostgresを使用して,ユーザ認証を行っています。 よろしくお願いします。

  • アクセス制限

    どのカテゴリで質問するか悩みましたが、こちらで質問させていただきます。 現在、Linux RedHat8、Apache、PHP4の組合せで、ユーザー認証のシステムを作成しています。 この中で、ファイルのダウンロードを行わせるページがありますが、ログインしない限り、ダウンロードが行えない仕組みにしたいのですがうまく行きません。 ファイルのダウンロードページへは、"HTTP_REFERER"を使用すればアクセス制限をかける事が可能ですが、ブラウザのURLへファイルのアドレスを直に入力されたら、アクセスの制限を行えません。 もしかしたら、セキュリティのカテゴリで質問する内容かもしれませんが、PHPで作成していますので、こちらで質問させて頂きました。 どなたか分かる方、宜しくお願いします。

    • ベストアンサー
    • PHP
  • ApacheのBasic認証によるアクセス制限

    ApacheのBasic認証を用いて、Basic認証時のアカウント毎に特定ディレクトリにアクセス制限を掛ける方法について質問します。 例えばBasic認証のアカウントとして、hoge、fuga ディレクトリとして、/var/www/html以下にhoge、fuga という、 アカウント名と同一名称のディレクトリがあった場合で、 hogeアカウントで認証した場合、 /var/www/html/hoge 以下にアクセス可能。fuga以下にはアクセス不可。 fugaアカウントで認証した場合、 /var/www/html/fuga 以下にアクセス可能。hoge以下にはアクセス不可。 といった具合です。 hoge と fugaだけであれば、httpd.confに直接その定義を記載すればよいのですが、 Basic認証のアカウントが増減するため、アカウント名と同じディレクトリ名には アクセス可能。それ以外にはアクセス不可、というアクセス制限を掛けたいです。 環境は以下の通りです。 Windows Server 2012 R2 Apache Web Server 2.2.25

  • WEBサーバーでActiveDirecotryの認証を使う方法

    WEBサーバーでActiveDirecotryの認証を使う方法 現在、LAN内のWindowsサーバーにWEBページをを置いて ADサーバーにログインした特定のユーザーにだけWEBページを公開がしたいと考えています。 ApacheのIPアドレスによるアクセス制限のようにログインユーザーによるアクセス制限がしたいです。 可能でしょうか?理想は、基本認証のようなログインダイアログは出したくないです。 また、IISを使えば可能といった情報でも構いません。 ご存知の方がいましたら教えてください。宜しくお願いします。

  • サイトからのダウンロードに制限を掛ける方法

    現在、Linux Apache Webサーバを使いLAN内でBasic認証にてログインしhtmlファイルにzipファイルをリンクさせクリックすることでデータがダウンロード出来るようになっています。(DLし放題の状態) そのzipには容量に差があるため出来ればDL総容量ではなくDLしたファイル数で制限を掛けたいと考えています。(1ユーザ当たり1日5ファイルまでなど) 何か良い方法はあるでしょうか? また制限を制御するに当たっての流れや考え方などもありましたらよろしくお願いします。 若しくは代替案として容量での制限方法などもありましたらよろしくお願いします。

  • htdoc内の所有者、アクセス権限は誰にすれば?

    PHPでシステムを構築しています。 実行するWebサーバはLinuxです。 機能はいろいろあるんですが、そのひとつにzipファイルをアップロードすると、解凍して所定のフォルダ(htdoc内)にファイルを展開(場合によっては上書き)するという機能があります。 このファイルを展開するフォルダと言うのは、zip内に一緒に入っているconfファイルに書かれているフォルダに展開するし組みになっています。 このフォルダはプログラムが入っているフォルダも指定されることが良くあります。 プログラムが入っているフォルダは、所有者はFTPユーザでアクセス権は644に現在なっています。 当然ですが、上記の解凍、展開(ファイル保存)を行うのはapacheユーザのため、ファイル保存でワーニングが出ます。 フォルダなどの所有者をapacheユーザにすべて変えるというのが一番手っ取り早いと思ったのですが、各ファイル、フォルダをFTPから修正、追加することが、アクセス権を747とかかなりゆるくしないとできなくなると言う問題があります。 そこで、質問ですが。 1.zip展開システムで追加、修正される可能性のあるファイル、フォルダはhtdocs以下すべてです。 アクセス権を747等緩めにしても問題ないものでしょうか? 2.1が問題ある場合、何かよい解決策はあるでしょうか?   (ftpユーザとapacheユーザを同じグループに入れて774とかにするというのも少し考えたのですが、こういう方法が一番よいのでしょうか?) なお、ログインしないと操作できないようになっていますので、phpファイルを壊す可能性のあるアップロードをさせる設計自体をやめるという回答は求めていません。 よろしくお願いします。

    • 締切済み
    • PHP
  • サイトの入り口で認証処理をしたいのですが、実現方法は?

    認証の処理をしたいと思っています。 環境:RedHat Linux, Apache2, PHP4, MySQL  入り口ページでのみ、ログイン処理を行い、  ログインを行った後は、  サイト内を自由に行き来できるようにしようと思っています。  ログインなしで、特定ページにアクセスすると  入り口ページへ飛ばされるようにします。 上記の認証処理を実現しようとした際に、 どのような実現方法がありますでしょうか。 過去に、ASPで行ったことがあり、 その頃はセッション変数で処理していましたが、 それが正しかったのかどうか、わかっておりません。 プログラムのそれなりの知識はあると思いますので、よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPのユーザと権限

    apacheのモジュールとして実行するPHPを実行させるユーザを指定する方法か、PHPでファイルを新規作成した時に、そのファイルの所有者を指定する方法を教えてください。 apacheの設定ファイルかPHPの設定ファイルで何とかできませんか?

    • 締切済み
    • PHP
  • sambaのSWATを使用しての権限

    Sambaを使用しての、ファイル共有を考えているのですが、 調べてみても、この用な設定ができるのでしょうか? OSはFreeBSDを使用する予定です。 パス:/home/share/ SWATを利用して、shareディレクトリにアクセスした時にユーザ認証を使用します。 ユーザ認証で、認証されたユーザは、share以下のディレクトリは、 読み書きの権限を与えます。 ユーザ例(master, book, user, user2) /home/share/書庫/のようなディレクトリを作成したとします。 この時SWAT利用して書庫のディレクトリは、特定のユーザ例(master,book) のみをアクセスでき、ファイルの読み書きが出来き、他のユーザはアクセス出来ないように設定する事は、可能なのでしょうか? 私の方で考えたSWATでの設定を記述します。 間違っていたら指摘をお願いします。 書庫ディレクトリの所有者は、2人ユーザをアクセスさせ、読み書き権限 を与えたいので nobody:nobody で パーミッションは 700 にします。 [path] : /home/share/書庫 [valid users] : master book [read only] : no [write list] : master book [browseable] : no ←2人しかアクセスしないのでnoにしました。 以上のような設定で、書庫以下のディレクトリには、master, book 以外の ユーザのアクセスは禁止で2人はファイルの読み書きができるのでしょうか? よろしくお願いします。 またこの時SWATで「path」の設定をする時に、日本語でpathを記述しても よいのでしょうか?

  • Webサーバ運営と DiskQuota について

    CGI や PHP などでデータをファイルシステムに保存する場合、そのファイルのオーナーが apache や nobody になる問題がありますよね。 こうなると、所有者が別人になるので Quota制限が効かなくなってしまいます。 皆さんはこういった問題にどう対処していますか? suEXEC がその答えになるのでしょうか?