質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

パーミッション

パーミッション(許可)は、ファイルシステム、データベース、そして他のコンピュータシステムに対するユーザーのアクセス権のことを指します。

Q&A

解決済

3回答

3115閲覧

一般の人がWEB上から見られないようにサーバーにファイルを保存する方法が知りたいです。

inari1973

総合スコア35

FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

パーミッション

パーミッション(許可)は、ファイルシステム、データベース、そして他のコンピュータシステムに対するユーザーのアクセス権のことを指します。

0グッド

1クリップ

投稿2019/08/27 03:32

サーバー上の画像ファイルをログインした人にしか見せないようにする仕組みを作成したいと思っています。

会員登録システムやファイルのアップロードの仕組みはPHP+SQL+Javascriptなどで作ったことがありますが、ログインしている人のみに画像ファイルを見せる仕組みをどのように作れば良いか思いつきません。

ログインしている人のみファイルを参照できるようにすれば良いと思うのですが、画像ファイルを一般の人に見られないようにサーバーに保存すれば良いかが分かりません。

パーミッションの設定だと画像を読み取れるようにする必要があるので意味がなさそうですし、非公開フォルダだとそもそもWEB上から保存したり参照できたりできない気がします。SQLに画像データを保存することも容量の関係上非現実的な気がします。

必要な考え方や仕組み、技術などをご存知の方がいらっしゃればご教示いただけますと嬉しいです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

手っ取り早いのは画像ファイルを特定フォルダにまとめ
Basic認証をかけてしまえば楽です。
ただ、いまさらBasic認証なんてダサい・・・という意見もあるでしょうから
画像は非公開もしくは読み込み属性をはずしたディレクトにおき
サーバーサイドのプログラムで画像ローダーを用意して、
ログインユーザーからの要求に対して画像ファイルの中身を返すように
すればいいでしょう

PHP

1<img src="imgload.php?src=hoge.jpg">

投稿2019/08/27 03:42

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

inari1973

2019/08/27 05:14

読み込み属性をはずしたディレクトリーに画像を置き、PHPのreadfileなどで画像を読み込んでみましたが表示されません。読み込み属性をはずしたディレクトリーであってもWEB上から画像を読み込めるのでしょうか。ちなみに「画像ローダー PHP」で調べてみましたが、該当しそうなものは見つけれませんでした。
yambejp

2019/08/27 05:57 編集

画像形式にあわせたheaderをつけてみてください > 読み込み属性をはずしたディレクトリー 面倒そうなので公開ディレクトリの外側においたほうが 楽かもしれません
inari1973

2019/08/27 07:32

非公開ディレクトリに保存してあるファイルをPHPで無事に表示することができました。ありがとうございます。 これは、非公開ディレクトリにファイルを保存しても、PHPなどのプログラムを使えば表示できてしまうということですよね。怖いなあ。
guest

0

ドキュメントルート以下にファイルを置いた場合、Web サーバが直接そのファイルにアクセスできます。
逆に言うと、ドキュメントルート以下にあるファイルは、URL を直接指定することでアクセスできてしまいます。
※.htaccess などでガードする方法はありますが

そこで、PHP なり CGI なりを介することで、ドキュメントルート外にあるファイルを読み取らせることが可能になります。

PHP や CGI の場合、Web サーバはそれらを呼び出し、その結果の出力をコンテンツとしてリクエスト元に返します。結果は HTML かも知れませんし、プレーンテキストかも知れませんし、画像だったり動画だったり、あるいは Excel ファイルかも知れませんが、それらは PHP なり CGI なりが適切なコンテンツ情報を含めたヘッダを返すことで、リクエスト元のブラウザが適切に処理します。
重要なのは、Web サーバはコンテンツの出所は気にしないでいいことです。それは PHP なり CGI が知っていてアクセスできる場所(=サーバ上のどこでもいい)にあればいいのです。
※ものによってはそもそも存在しない(自動生成して返す)ようなことも可能です

投稿2019/08/27 08:16

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

レンタルサーバーレベルの話とすると

ドキュメントルート外に置けばいい。
publicやpublic_htmlがドキュメントルート。
この上にもディレクトリを作れるサーバーならimagesなどを作ってそこに置く。
PHPからならimagesも読み書きできるのでPHPを通して表示。

投稿2019/08/27 04:17

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

inari1973

2019/08/27 05:10

ドキュメントルート外に画像を保存しても、PHPを使用すればWEB上から参照できるのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問