• ベストアンサー

phpでログインの有無によってファイルアクセスの是非を変更したい

phpでファイルをサーバーにアップロードし、ログインしないとそのファイルにアクセスできないというシステムを作りたいと考えています。 現在ログインしてアップロードするところまでは作りました。 そのファイルをたとえばmixiのように公開・非公開の設定を設けて、ログインしないと閲覧できないようにするにはどうしたらいいのでしょうか。 属性の意味があまり分かっていないのですが、いろいろ変更してみても閲覧できるか、できないかの2通りになってしまって、ログインされているかどうかでアクセスのしかたをかえる方法が分かりません。 漠然とした質問で申し訳ありません。何かヒントだけでもいただけると助かります。 サーバー:apache 言語:php

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

  • ベストアンサー
  • warez
  • ベストアンサー率57% (29/50)
回答No.2

> たとえば、アップロードしたファイルの場所が/dir/image.jpgだとすると、ドメイン名+このurlをブラウザのアドレスバーに打ち込むことで閲覧できてしまうのです。これを防ぐにはどうしたらいいのでしょうか? ・ドキュメントルートの外に置く ・/dir をアクセス制限する どちらにしても、ログイン状態のチェックと、目的のファイルを読み込んで表示する装置が必要です。

metheglin
質問者

お礼

回答ありがとうございます。 できました! /dirのアクセス制限の仕方が分かっていませんでした。 ディレクトリの属性値についてよく分かっていなかったことが問題でした。 warezさん、Crystalizeさん気にかけてくださってどうもありがとうございました。

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

その他の回答 (1)

回答No.1

こんにちは。具体的なPHPのプログラムというよりは方法のざっくりとした話になりますが、 例えば、データベースを使うことができるのであれば、登録したユーザーのユーザー情報用のテーブル(IDとパスワード等を入れたもの)を作っておいて、アップロードしたファイル情報用のテーブル(ファイル名とそれをアップロードしたユーザー情報)も作り、ファイルにアクセスする際に、テーブルを参照して該当するユーザーであればファイルを開く事ができ、該当しないユーザーであればエラーを出す、 というような感じで作れば実現できると思います。 ちなみに、サーバー上のファイルそのものの属性や所有者は、ネットという不特定多数の環境からアップロードすれば、Apacheで指定したユーザーになるので、phpでファイルをアップロードしたユーザーとは概念が異なると思います。 以上ですが、参考になれば幸いです。

metheglin
質問者

お礼

早速のご回答ありがとうございます。参考になりました。 ですが、一つ懸念されることがあるのです。 たとえば、アップロードしたファイルの場所が/dir/image.jpgだとすると、ドメイン名+このurlをブラウザのアドレスバーに打ち込むことで閲覧できてしまうのです。これを防ぐにはどうしたらいいのでしょうか? mixiは画像を非公開などにすると、アドレスバーからアクセスしても閲覧できないようになっているんです。 もし分かりましたら回答よろしくお願いします。

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

関連するQ&A

  • IIS+PHPで、PHPファイルが実行できない?

    XP-pro SP2+IIS5.1+PHP5で、イントラネット内だけに公開するページを作ろうとしています。公開フォルダのアクセス権限に、アクセスを許可したい人にフルコントロールを与えています。(各人はActive Directory認証で、ドメインにログインしています。) IISは統合Windows認証にだけチェックを入れています。  HTMLファイルには権限を与えた人はアクセス出来るようになったのですが、PHPにアクセスしようとするとパスワードなどを求める画面が出てきて、ドメインにログインする時のIDなどを入力しても拒否されてしまいます。 ところが作成者本人だけはPHPファイルを正常に実行できています。(サーバPCからも、別のPCからも) 何をどのように設定すれば、作成者以外の人にもPHPファイルの実行が出来るようになるのでしょうか? 以上、よろしくお願いします。

  • phpで巨大なファイルをアップロード

    お世話になります。 PHP・Apacheを使用して大きな容量のファイルをアップロードしようとしています。 php.iniで下記のように値を変更しました。 max_execution_time = 1800 max_input_time = 1800 memory_limit = 2048M post_max_size = 2048M upload_max_filesize = 2048M default_socket_timeout = 1800 この状態でApacheを再起動して1.2GBほどのファイルをアップロードしてみたのですが エラーも起こらず、正常にアップロードされたかと思ったら160バイト程の容量でサーバーにあがっていました。 600MBくらいのファイルでためしたところ正常にアップロードされたのですが 1GB以上のファイルをアップロードするためにはまだなにか設定が足りない、または間違っているのでしょうか? サーバーはCentOS5.5の64bit、メモリは16GBあります。 回答よろしくお願いします。

    • ベストアンサー
    • PHP
  • CodeIgniter/index.phpにアクセスすると真白なページが表示されてしまいます。

    はじめまして。CodeIgniter初心者です。 公開サーバのDocumentRoot配下にディレクトリ「CodeIgniter」を 作成し、その配下に開発環境からexportした「system」ディレクトリとindex.phpをアップロードしております。 /var/www/html/system/application/config 配下のconfig.phpとdatabase.phpの環境変数も 公開サーバ用に変更して、Apacheを再起動しております。 config.php -------------------------------------------------------------- ・・・ $config['base_url']= "http://公開サーバIPアドレス/CodeIgniter/"; ・・・ -------------------------------------------------------------- ブラウザより http://公開サーバIPアドレス/CodeIgniter/index.php にアクセスすると真白なページが表示されてしまいます。 /var/log/httpd 配下のaccess_logには ”GET /CodeIgniter/index.php HTTP/1.1”が出力され、 error_logには何も出力されておりません。 /var/www/html/CodeIgniter/system/logs 配下にもログファイルは作成されておりません。 phpinfo.php作成し、 http://公開サーバIPアドレス/CodeIgniter/phpinfo.php へアクセスすると、PHPのバージョン情報ページが表示されますので PHPは正常動作しているようです。 公開サーバにおける各サービスの主な設定(一部抜粋) Apache: httpd.conf ------------------------------------------ ・・・ LoadModule rewrite_module modules/mod_rewrite.so DocumentRoot:/var/www/html ・・・ ------------------------------------------ PHP: php.ini ------------------------------------------ ・・・ display_errors = On mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto ・・・ ------------------------------------------ php.ini ------------------------------------------ ・・・ LoadModule php5_module modules/libphp5.so AddHandler php5-script .php AddType text/html .php DirectoryIndex index.php ・・・ ------------------------------------------ お忙しいところ大変恐縮ですが、アドバイスいただければ幸いです。 何卒宜しくお願い申し上げます。

    • 締切済み
    • PHP
  • アクセスされたくないPHPファイル

    Apache+PHPでwebサイトを作成しています。 ここで、ユーザーからアクセスされたくないPHPファイル(MVCのうちのMやC)があるのですがどうすればいいでしょうか? ご存知の方がいらっしゃいましたら、ご教授ねがいます。

    • ベストアンサー
    • PHP
  • PHPのファイルアップロードについて

    現在CakePHPでファイルのアップロードを行おうとしています。 で一通りアップの手順は書き終わったのですが、じつはアップロードするファイルが マックスで100MBほどになる可能性があるのです。 現在、仮のサーバーで試してみたところ10~11MBほどのファイルであればちょっと時間がかかりますが、アップはできました。 ただしそれ以上の重いファイルになるとBadRequestとなりアップできません。 通常PHPはデフォルトでは2MBが最大アップ容量だと思います。 それの制限を #Apache側でのリクエストのバイト制限 LimitRequestBody 300000000 #PHP.ini側でのPOSTリクエストのバイト制限 php_value post_max_size 300M #PHP.iniでのファイルアップロードのバイト制限 php_value upload_max_filesize 300M 上記のような記述をhtaccessに記述しています。 ところが、12MB~以上のファイルになるとブラウザがBadRequetを返してしまいます。 これは実際のレンタルサーバーだけでなく、ローカルのApache環境でも同様の現象が起きます。 他に、アップ時に制限をかけているプロパテイ的なものがApacheやPHPの設定にあるのでしょうか? アップロードに詳しい方ご教授お願いいたします。

    • ベストアンサー
    • PHP
  • PHPでアクセスログ管理システム

    掲題の通り、PHPでアクセスログを管理(管理画面より閲覧)できるシステムを作ろうと思っています。システムの実現方法に悩んでいます。「こういうのが最も動作が軽い」から「実務でこういうのを作った」「自分が作るならこう作る」までなんでも良いので(ちょっとしたヒント程度のものでもかまいませんので)アイデアをいただけたらありがたいです。 要望は以下のとおりです。 ・管理画面から閲覧ができる(ログファイルを見る必要がない) ・サーバーへの負荷が少ない ・リアルタイムがベスト ※具体的なソースのご提示はなくてもかまいません ※対象サイトの月間PVは3万~5万程度です。 ※「Google Analyticsを使えば良い」はお控えください 当方で考えたシステムは以下の3通りです。 == 1. アクセスログテーブルを作成し、ユーザーからのアクセスするたびにDBにINSERTする 2. テキストファイルに出力をしておいて、アクセスの少ない時間帯にバッチを動かして、テキストからDBにINSERTする 3. テキストファイルに出力して、管理画面でアクセスするたびにテキストを加工し、閲覧できるようにする == どれも、どこかに大きな負荷がかかりそうな気がして、いまいちこれで良いのか、という感じがしています(3万~5万というPVがどの程度のものかがいまいち掴めていない、というのもありますが…) 以上です。よろしくお願いします。

    • 締切済み
    • PHP
  • ファイルへの直接アクセスをできないようにするには

    PHPプログラミングにてサーバ上に格納されているcsvファイルへ データを書き込み、ダウンロードボタンをクリックしてダウンロードするような処理を現在作成しております。 ファイルへの書き込み、ダウンロード操作はログインされたユーザのみが行えるようにしたいのですが、URLでcsvファイル名まで直接入力するとファイルが見られてしまうことに気付きました。 U直接アクセスを防ぐにはどのようにしたらよろしいでしょうか? 何分未熟なため困っており、お知恵を拝借させて頂きたく 質問させていただきました。ご教授よろしくお願い致します。 使用している環境は下記になります。 CentOS5.2 PHP5 apache2.2 MySQL5.0

    • ベストアンサー
    • PHP
  • PHPでのファイルアップロードについて

    初めて質問させていただきます。 PHPの勉強をはじめたばかりの初心者です。教本をもとに勉強を進めています。すべて教本どおりに設定し進めてきましたが、ファイルアップロードの箇所でどうしてもうまくいきません。いろいろ、php.iniを修正したり、PHPを修正したりしましたが本どおりの結果になりません。ご指導お願いします。 以下2種類のhtmlファイルとphpファイルを使用 (1)upform.htmlの内容 <HTML><BODY> <FORM METHOD="POST" ENCTYPE="MULTIPART/FORM-DATA" ACTION="upload.php"> <INPUT TYPE="FILE" NAME="upfile"><br> <INPUT TYPE="SUBMIT" VALUE="アップロード"> </FORM> </BODY></HTML> (2)upload.phpの内容 <html><body> <?php if(move_uploaded_file ($_FILES['upfile']['tmp_name'], "./htdocs/phpbook/" ) == FALSE) { print "失敗しました。"; }else{ print ($_FILES['upfile']['name']); print "をアップロードしました。"; } ?> </BODY></HTML> 上記内容でhtmlファイルを呼び出し、abc.txt(デスクトップに保存している)をアップロードしようとすると、以下のエラーが返されます。 ↓↓エラー内容 Warning: move_uploaded_file(./htdocs/phpbook/) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\Program Files\Apache Group\Apache2\htdocs\phpbook\upload.php on line 7 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\Temp\phpB.tmp' to './htdocs/phpbook/' in C:\Program Files\Apache Group\Apache2\htdocs\phpbook\upload.php on line 7 失敗しました。 ↑↑エラー内容 いろいろ思考錯誤し、upload.phpファイルの6行目"./htdocs/phpbook/"の箇所を、"abc.txt"としてみると、『アップロードしました』とアップロードに成功(?)し、abc.txtはC:\Program Files\Apache Group\Apache2\htdocs\phpbook内にアップロードされました。 教本では、"./htdocs/phpbook/"はファイルの保存先と注記されていますが、エラーになります。"abc.txt"に書き換えることでアップロードに成功しています。また、なぜ、アップロード先がC:\Program Files\Apache Group\Apache2\htdocs\phpbook内になるのかもわかりません。php.iniファイルの設定でしょうか。質問が長くなり、また、内容に足りない面もあるかもしれないですが、どうかよろしくお願いします。 【参考】 php.iniのFile Uploadsを抜きました。 ;;;;;;;;;;;;;;;; ; File Uploads ; ;;;;;;;;;;;;;;;; ; Whether to allow HTTP file uploads. file_uploads = On ; Temporary directory for HTTP uploaded files (will use system default if not ; specified). upload_tmp_dir = ; Maximum allowed size for uploaded files. upload_max_filesize = 2M

    • ベストアンサー
    • PHP
  • PHP実行でファイルのダウンロードのダイアログが開きます。

    OSはDebian GNU/Linux 3.0です。 PHP4.3.7とapache1.3.31において PHPファイルが正常に開けません。 下記のファイルを作成しパーミッション777で FFFTPを用いてアップロードしました <? phpinfo(); ?> しかしながらブラウザでアクセスすると、ファイルの ダウンロードのダイアログが開きます。 設定はapache側のみしており、 <Directory /var/www> options All AllowOverride All Order allow,deny allow from all </Directory> addhandler cgi-script .cgi .pl addtype text/html .shtml addhandler server-paresd .shtml を変更しました。PHPの方は変更していません。 どうしてファイルのダウンロードのダイアログが 開くのでしょうか?

  • PHPにてファイルがアップロードできません。

    PHPにてファイルがアップロードできません。 今回PlugSheevaの亜種である玄柴(ubuntu)にてapache2+PHP5でAjaXplorerという phpで動作する物を設置しようと試みているのですが AjaXplorerにブラウザでアクセスしアップロードしようとすると there has been an IO Error:Error #2038 There has been an HTTP Error:412 というエラーが発生します。 色々試みたのですが諦めてaxlope20というphpでブラウザからアップロードを試みたのですが 転送を試みると転送画面が自動で閉じ、何の変化もなしに前のディレクトリ画面に戻されます。 このことからphpの設定でアップロードの設定ができていないと考えたのですが 解決方法がわかりません。 php.iniの設定を以下のものにしました。 safe_mode = Off (デフォルトのまま) max_execution_time = 300 max_input_time = 600 memory_limit = 32M register_globals = On post_max_size = 3500M file_uploads = On upload_tmp_dir = /tmp upload_max_filesize = 3500M と、したのですが結果は変りませんでした。 chmod 777 tmpでtmpフォルダにパーミッション777を渡してあります。 容量の小さなファイルもアップロードできません。 しかし設置当初一度だけAjaXplorerで500Kbのexeファイルがアップロードすることができたのですが それもなぜできたのか不明です。 後に同じファイルを何度も転送しようと試みましたが駄目でした。 ext3でフォーマットしたUSBを差込み、それをmount /dev/sda /mnt/usb/としてマウント /mnt/usb/www/htmlがapache2の公開ディレクトリにしております 今は実験段階ですのでAjaXplorerもaxlope2も chmod 777 -Rでフォルダ全体にパーミッション777を与えてあります 上記の事以外は初期設定のままであると思います。 phpでファイルをアップロードできるようにするにはどうすればいいのでしょうか? 回答よろしくお願いします。

    • ベストアンサー
    • PHP