• 締切済み

画像ファイルをブラウザ経由でアクセスされたくない

PHPでプログラミング中です。 ユーザの画像ファイルを現在public_html配下のimgに保存しているのですが、これだとブラウザ経由で不特定多数の人に閲覧されてしまうため制御したいと考えています。 例)test.com/img/1.gif等ブラウザで表示されてしまう。 上記のような場合どの様に対応されていますでしょうか。 DBに画像を登録しようとしたのですが、DB負荷を考慮して今回はDBには画像は保存しない方針です。 ちなみに、htaccessで制御できるかと考え、以下のURLを試しましたが共にうまくいきません。 http://server-setting.info/centos/htaccess_deny_picure.html http://www.shtml.jp/htaccess/data.html 確かにブラウザ経由で直接画像にアクセスすると見えなくなっているのですが、PHPからアクセスしても画像が表示できなくなりました。 対応方法どなたかご存知の方いらっしゃいましたらご教授ください。 よろしくお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

>PHPからアクセスしても画像が表示できなくなりました。 画像データをブラウザに返すphpスクリプトのURLをどのように組み立てられていますか?そのURLのQueryStringが画像ファイル名で終わっていたりはしませんか? gazou.php?file=1.jpg みたいになっていると、1.jpg というURLと実質的に(.htaccessでの条件に合致するかどうかは)変わりません。gazou.php?file=1 として自前で拡張子を補うかgazou.php?file=1.jpg&a=b のように適当なQueryStringを追加してしまうなどの工夫は必要です。 (蛇足) 私が書くとしたら (1)当該ページにアクセスしたらCookieを書き出す(期限はブラウザを閉じるまで)。 (2)画像ファイルへのアクセスは、そのCookieが存在しないとdenyとする。 くらいしかやりませんね。画像ファイルなどをphpスクリプト経由にするのは、もっと細かい制御が必要なケースに限定します。

関連するQ&A

  • PHP経由でローカルユーザしかアクセスできない

    Windows XPにIISとPHPとMySQLをインストールして、DBのテーブルの値を参照するスクリプトを作成しています。 ローカルからブラウザ経由でスクリプトにアクセスすると、問題なくDBの値が表示されるのですが、隣のPCからアクセスすると、何も表示されません(エラーも出ません)。またMySQLのログには何も表示されません。phpinfo()は動いています。 IISの匿名ユーザからphp経由でMySQLにアクセスさせるには、何か設定が必要なのでしょうか? php4.4.2.2 MySQL4.1 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • DBに格納された画像データを縮小して表示したい

    PHP5+MySQL5です。 DB内のBLOBカラムに、Base64エンコードされた画像データが格納されています。 これを、サムネイル用に縮小して表示したいのですが、widthとheightで小さくするのではなく、ファイルサイズも小さくしてブラウザに渡したいと考えています。 (小さくした画像は保存しません) そこで、DBから取得した画像データを「imagecopyresampled」で再サンプリングしつつ小さくしたいと思いましたが、画面には何も表示されませんでした。 以下、ソースを簡潔に記載します。 $db_img = "DBから画像データを取得"; //600x600の画像 $old_img = base64_decode($db_img); $new_img = imagecreatetruecolor(200,200); //200x200のサムネイル画像を作成 $thumbnail = imagecopyresampled($new_img,$db_img,0,0,0,0,200,200,600,600); print $thumbnail; $old_imgの処理が間違っているのだろうと思うのですが、どのように処理すればいいのかわかりませんでした。 この場合、どのように処理すればいいのか教えていただけないでしょうか? 宜しくお願いします。

    • 締切済み
    • PHP
  • データーベースのすべての画像を取り出したい

    データーベースのテーブル内の画像をすべて取り出すプログラムを書いています。 データベース(Mysql)には画像が4列(4個)存在しますがプログラムの書き方が悪いと思うのですが、1つしか画像を取り出すことができません。 すべて取り出すにはどこを直せばよいでしょうか? 書いたソースは以下になります。 たぶん$img_db=$row["img_data"]; echo $img_db;が原因のような気がしますが分かりません。 詳しい方教えてください。 <display.php>(データーベースから読み込みようphp) <?php $conn=mysql_connect("localhost","root",""); mysql_select_db("practice"); $result = mysql_query("select img_data from sample "); while($row= mysql_fetch_array($result)){ $img_db=$row["img_data"]; echo $img_db; } ?> <output.php>(ブラウザ表示用php) <html> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8”> <title>画像表示</title> </head> <body> <p>MySQLのBLOBにバイナリで格納した画像を表示してみます。</p> <?php echo "<img src=\"display.php?$img_db\">" ?> </body> </html>

    • ベストアンサー
    • PHP
  • テキストファイルを経由しての画像呼び出し

    はじめまして。 PHPをはじめてまだ間もない者ですが、行き詰ってしまいましたのでご質問させていただきたいと思います。 画像をアップロードする時に backimg.txt という名前でファイル名を取得しているのですが それを利用して画像を呼び出そうとしているのですがどうにも表示してくれません。 表示どころか、エラーが出てしまいます… ファイル構成・PHP部分は以下の通りです。 public_html ├─ index.php  ←ここの一部のプログラムです ├─  ・ ├─  ・ └─ background_img     ├─ backimg.txt  アップロードしたファイル名が記述     └─ test.jpg   アップロードした画像 <?php if(file_exists("background_img/backimg.txt")){ $fp = fopen("background_img/backimg.txt","r") or die("ファイルのオープンに失敗しました"); $buff = fgets($fp); fclose($fp); } echo'<img src="'.$buff.'" border="0">'; ?> ※この $buff = fgets($fp); の部分でエラーが出ます。 backimg.txt内の文字(UPする度、この一行を上書きしていってます) ──────────────────   background_img/test.jpg ────────────────── ※PHPでアップロードした画像は  background_img フォルダに入るようになっています。 ※画像名はまちまち変わりますので、 test.jpg 固定ではありません。 ※データベースを使えないサーバを利用しております。 以上の条件でどうやったら解決できるのか、 お手数おかけいたしますが、教えていただければ幸いに思います。

    • ベストアンサー
    • PHP
  • 画像がかわらない...orz

    php初心者なので、とんちんかんな質問をしていたらすいません。 登録した画像を変更した時、DBに保存してある画像名もディレクトリに 保存してある画像もちゃんと最新になっているのに、呼出すと変更前の画像が 表示されてしまいます。 呼出している<img src="http://~/XXXXXX.jpg" />のパスもファイル名も 正しい内容になっています。 それに、不思議な事にブラウザの更新ボタンを押すと正しい画像が表示されます。 ど~して1つ前に処理した画像が出てしまうのでしょう... こんな質問内容でわかって頂ければどなたか助けて下さい!<(_ _)>

    • 締切済み
    • PHP
  • 秘密ファイルのサーバーへの保存方法で最適なのは?

     例えば、データベースを呼び出すときのユーザー名やパスワードを、そのまま外部から閲覧できるファイルに書いておくと危ないから、別のファイルにして呼び出すようにするというのは初心者用の教科書にも書いてありますよね。  例えば、PHPでいうとrequire_once()なんかで呼び出したり。  その呼び出すファイルは別のディレクトリに入れておいて、そのディレクトリにアクセス制限をかけることになると思いますが、その方法がはっきりしなくて困っています。  検索してみると、.htaccessに書いて制限するという方法がたくさん出てくるんですが、その説明の中で気になるのが「ブラウザではアクセスできなくなる」というもの。  例えば Order Deny,Allow Deny from all  と書けば、ブラウザのURL欄でファイルを指定しても見られなくなりますよね。  これだと誰もアクセスできないけど、PHPとかスクリプトからは読み出せるので、そういうファイルを保存するのによく使われてるなんて書かれてました。  でも、プログラム上から読み出せるなら、よそのサーバーからそういうプログラム書いてアクセスされたら読まれちゃうんじゃないの?と不安になります。  理想としては、同じサーバーもしくはドメイン上のHTMLやPHPなどからは読み込めて、それ以外のファイルからはブラウザだろうがプログラムだろうがアクセスできない、という形ですが、そういうことはできるもんなんでしょうか?  上記の.htaccessを使った方法で充分?  もし他にやり方があれば、ぜひご教授下さい。

  • .htaccessのdeny指定方法

    .htaccessにて、 <Files ~ "\.db$"> deny from all </Files> みたいにして、ブラウザからアクセスを不可にしたいのですが、 いくつかマッチ表現の仕方がわかりません。 まず、tmpから始まるファイル(tmp0101.datとかtmpabc.txtとか)を 全てアクセス不可にする場合と、 特定のディレクトリ配下を全てアクセス不可にする場合がわかりません。

  • Access2010にブラウザからアクセスしたい

    よろしくお願いします。 Access2010を用いて営業が使用する顧客DBを下記条件で作成したいと思っています。 まずは下記条件を満たすことは可能でしょうか? 条件 1.Access2010のライセンスは1つしかありません。 2.社内からのみ、5名くらいの営業メンバーにWEBブラウザでアクセスさせます。 3.VBAを組み込みたいと思っています。 自分で調べたところ、作成したWEB用のDBをSharePoint サイトへ発行するとインターネット 経由でDBへアクセス可能という記述を見つけました。下記の質問があります。 1.作成したDBをインターネット上のマイクロソフトのSharePointというサーバーに  置くという意味でしょうか? 2.仮に1が正しいならば、1.を実行するには無償でしょうか有償でしょうか?  何か事前に登録が必要なのでしょうか? 3.仮に1が正しいならば、セキュリティはどのように守られるのでしょうか?  使用するユーザーごとにパスワードが設定できるなど 4.仮に1が正しいならば、URLはどのように決められるのでしょうか? 5.インターネット上ではなく、社内のサーバーに置いて、ブラウザでアクセスさせる  ことは可能なのでしょうか?

  • ブラウザに表示されたhtmlファイルの保存拒否方法

    http://www.komiya.co.jp/optanqfx/ というサイトで 「名前を付けて保存」をしたら、 全て「アクセス拒否」の画面だけが ダウンロードされました・・・。 当然、右クリックやら文字参照やら 直接アクセス拒否やら想像できることは しましたが、全く駄目でした。 保存を制御する関数(PHPやJavaScript、 または、.htaccessの命令等)でも あるのかと思い、色々調べましたが、 有効なものはありませんでした。 どうして出来るのでしょうか? コメントをお願いします。

    • 締切済み
    • PHP
  • DBに格納された画像データを縮小して表示したい

    PHP5+MySQL5です。 DB内のBLOBカラムに、Base64エンコードされた画像データが格納されています。 これを、サムネイル用に縮小して表示したいのですが、widthとheightで見た目だけを小さくするのではなく、ファイルサイズも小さくしてブラウザに渡したいと考えています。 (小さくした画像は保存しません) そこで、DBから取得した画像データを「imagecopyresampled」で再サンプリングしつつ小さくしたいと思いましたが、画面には何も表示されませんでした。 以下、ソースを簡潔に記載します。 $db_img = "DBから画像データを取得"; //600x600の画像 //Base64デコード $old_img = base64_decode($db_img); //200x200のサムネイル画像を作成 $new_img = imagecreatetruecolor(200,200); //再サンプリング・縮小(600x600→200x200) $thumbnail = imagecopyresampled($new_img, $old_img, 0, 0, 0, 0, 200, 200, 600, 600); //画面出力 print $thumbnail; この場合、どのように処理すればいいのか教えていただけないでしょうか? 宜しくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう