• 締切済み

PHPの携帯サイトの

PHPの携帯サイトの http//hoge.ne.jp/img/1 で画像を公開しようとしています。 このURLにリンクした際はPHPの処理で特定のユーザー以外は見れないようにします。 しかし、画像ファイルが実際においてある http//hoge.ne.jp/file/img/hoge.jpg にアクセスされた場合はすべてのユーザに見られてしまいます。 これを防ぐ方法はなにか無いでしょうか?

  • PHP
  • 回答数2
  • ありがとう数4

みんなの回答

  • inoue_kou
  • ベストアンサー率57% (27/47)
回答No.2

<?php /* ここで個体識別情報で振り分け処理をして$userを得る */ // $userそれぞれの画像パス(webから参照できない場所でも可。読み込み権限は必要。) $imgfile = '/home/user/file/img/'.$user.'.jpg'; // ファイルの存在を確認 if (file_exists($imgfile)){ // ヘッダーを作成 header('Content-Type: image/jpeg'); header('Content-Length: ' . filesize($imgfile)); ob_clean(); // バッファを全て書きだす flush(); // ファイルを読み込んで標準出力に書き出す readfile($imgfile); } exit; ?> 上記の方法だと画像しか出力しない。 htmlの中に画像を入れるなら、上記の画像を出力する部分を別ファイルにする。 たとえば、getimg.php に画像出力部分を書くとすると、 元の個体識別用のphpでは、識別後にhtmlの出力を書いて、 その中のイメージ呼び出し部分で echo "<img src=\"./getimg.php?u=$user\">"; と言うように呼び出させる。

  • inoue_kou
  • ベストアンサー率57% (27/47)
回答No.1

PHPの処理がどういうものか分からないですが、 PHPで認証すると同時に画像を表示させてやる。 画像はwebからアクセスできない所に置く。 もしくはPHPからのアクセス以外は拒否するように.htaccessを書く。 ではだめですか?

ttakayoshi
質問者

補足

>PHPの処理がどういうものか分からないですが、 説明不足ですいません。 個体識別情報で振り分けています。 >PHPで認証すると同時に画像を表示させてやる。 >画像はwebからアクセスできない所に置く。 >もしくはPHPからのアクセス以外は拒否するように.htaccessを書く。 知識が足りないもので・・・ それぞれのやり方を教えていただけませんか?

関連するQ&A

  • PHP初心者です。

    xamppを使用して勉強してます。 htmlでファイルをアップロードするソースを作り、phpで <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8" /> <?php $file=$_FILES['my_img']; $filePath="./user_img/".$file['name']; move_uploaded_file($file['tmp_name'],$filePath); というコードを書いて実行したところ、 Warning: move_uploaded_file(./user_img/021.jpg): failed to open stream: No such file or directory in  このphpファイルの名前 on line 〇〇行目 Warning: move_uploaded_file(): Unable to move 'C:\xampp\tmp\php6207.tmp' to './user_img/021.jpg' in このphpファイルの名前 on line 〇〇行目 とエラーになってしまいました。 なぜでしょうか?

    • 締切済み
    • PHP
  • download.phpは何故あるのか?

    ファイルをダウンロードするときに、www.hoge.jp/services/download.php?file=hoge.zip などのURLが書いてあることがありますが、一体なんのためにdownload.phpを使っているのでしょうか? www.hoge.jp/services/file/hoge.zipではいけないのでしょうか?

    • ベストアンサー
    • PHP
  • file_existsが動作しない

    お世話になります。 $IMG_URL = "http://hoge.hoge/"; $test = 1; $logo_url = $IMG_URL."logo/".$test."jpg"; if(file_exists($logo_url)){ $var = "あるよ!"; }else{ $var = "ないよ!"; } という形で画像ファイルが存在するかを調べているのですが、PHPに直接記述した場合動作し、functionの中に入れると動作しなくなるのはなぜでしょうか? function pict($test){ $IMG_URL = "http://hoge.hoge/"; $test = 1; $logo_url = $IMG_URL."logo/".$test."jpg"; if(file_exists($logo_url)){ $var = "あるよ!"; }else{ $var = "ないよ!"; } return $var; } 上記のfunction内に入れた場合、returnの値が「ないよ!」になってしまうのです。 どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • php スクレイピングで処理後 修飾子?

    スクレイピング処理後、元のURLが/hoge.jpgなのでURLが正しく表示されません。 修飾子?みたいなので文章を追加して表示させるしか方法はないのでしょうか? このような状態です。 <img src="/hogehoge.jpg">の状態だと自分の管理しているHPのURLで開いてしまう。 これを <img src="/hogehoge.jpg">を<img src="http://hogehoge/hogehoge.jpg">としたいです。 あと、画像のサイズは変更できるのでしょうか? よろしくお願いします。

    • 締切済み
    • PHP
  • URL直打ちされるとファイルが見えてしまう

    URL直打ちされるとファイルが見えてしまう お世話になっております。 過去に似た質問が頻出し、検索すれば似た内容は出てくるのですが どうしても理解できないので質問いたします。 質問とやや外れた部分から書きますが、 自分の理解度を知っていただく為に現状の説明から書きます。 ----説明ここから----- 現在WAMP環境で会員サイトを作成しています。 ログイン画面で入力されたIDとパスワードをセッション変数で持ち回り、 各ページは表示時にセッション変数のIDとパスワードを元にDB問合せを実施し 該当会員が居なければ(セッション変数が空ならば) ログイン画面からのアクセスでない(直打ち)と判断し ログインエラーのhtmlを表示します。 phpでDB問合せ等で判定できるページ(.phpファイル)はこれで直打ち対策が出来たのですが 会員用のファイルアップローダを作る上で、 アップされた各ファイルへの直打ち対策をどうすればよいのかどうしても判りません。 ~hoge/hoge1.php ~hoge/hoge2.php ~hoge/login.php ~hoge/uploader.php ~hoge/file_dir/user1/hoge.jpg ~hoge/file_dir/user2/hoge.jpg ~hoge/file_dir/user3/hoge.jpg アップされたファイルは、どのユーザー宛のファイルかで、 user1~user3(会員分作成され、命名規則があるフォルダ)に分けてアップロードされます。 しかし上げられたこのファイルのアドレス("~hoge/file_dir/user1/hoge.jpg") を直打ちされるとログインしていないユーザーにも参照できてしまいます。 またuser別フォルダが規則的な名前なので、 user1が自分宛に送られたファイル名から user2や3のファイルを推測、直打ちできてしまう問題もあります。 例) 1.user1のフォルダにuser1宛ての"4月分経費受理済.doc" というファイルがアップされる。 2.user1は"4月分経費受理済.doc" のフルパス "~hoge/file_dir/user1/4月分経費受理済.doc" を得る。 3."~hoge/file_dir/user2/4月分経費受理済.doc" を打ち込めばuser2宛ての個別ファイルが参照できてしまう。 勿論こんな状態で使用する事など出来ません。 user1のフォルダ配下のファイルは、user1(もしくは管理者など特別な権限を持つユーザー) にしか参照できないようにしなければいけません。 ----説明ここまで----- 説明が長くなりました。冗長で申し訳ありません。 質問を再度まとめますと、 1."~hoge/file_dir/user1/hoge.jpg" などのファイルへ   URLが直打ちされた時、参照・ダウンロードが出来ないようにするにはどうすればよいのでしょう? 2.ログインしているユーザーであっても、フォルダごとの参照可能・不可をどう制御すればよいのでしょうか? 知りたいのはこの2点です。 もしかしたらこれらへの質問への回答以前に、 前提で理解していなければ行けない知識があり、 それがないから自身の検索で理解に至らなかったのかもしれません。 お手数お掛けしますが何卒宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHPで動的に生成されるCSVをサーバーに保存

    業務処理を自動化するためにPHPで動的に生成されるCSVファイルを、WEBサーバーに保存したいと思っています。 wgetコマンドを使って保存しようと思っていますが、リンクにGETパラメータ?(http://hogehoge.com/hoge.php?hoge=1&hoge=2)が設定されているためかcsvが生成さずPHPページ(hoge.php)が保存されてしまいます。 実行したwgetコマンド /usr/local/bin/wget /home/useraccount/www/hoghog/hog.csv 'http://hogehoge.com/hoge.php?hoge=1&hoge=2' -O - また、phpファイルを生成し、 <?php $file = 'http://hogehoge.com/hoge.php?hoge=1&hoge=2'; $newfile = 'test.csv'; if (!copy($file, $newfile)) { echo "failed to copy $file...\n"; } ?> と上記のようにやっても同じ結果でした。 ブラウザ上のURLバーでhttp://hogehoge.com/hoge.php?hoge=1&hoge=2とするとCSVファイルの保存画面が出てくるページなのですが、何か良い方法はありませんでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 携帯画像をPHPでリサイズしたい。

    下記サイトに携帯画像のリサイズのPHPサンプルがあります。 SSIで読み込むようにしてありますが、 <?php $_GET['file']='top_btn01.jpg';require_once("trans.php"); ?> として、PHPを読み込んでいます。 この状態なら上手く画像がリサイズされて表示するのですが、 1ページに何枚もリサイズしたい画像があって、 <?php $_GET['file']='top_btn01.jpg';require_once("trans.php"); ?> <?php $_GET['file']='top_btn02.jpg';require_once("trans.php"); ?> <?php $_GET['file']='top_btn03.jpg';require_once("trans.php"); ?> と複数指定すると2枚目以降から表示できず、 (Fatal error: Cannot redeclare encode() (previously declared)とエラーが出ます。 色々調べたりしましたが全く原因がわかりません。 2枚以上指定しても問題なく表示するにはどのようにしたら良いでしょうか? まったく分からず困っています。 大変申し訳ないですがよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPからPOSTで他のPHPを実行する方法

    サイトのアクセスログ収集をするPHPを初心者が悩みながら作ってます。Javascriptで拾いきれないアクセスを解析するためです。PHPからPOSTで他のPHPを実行する方法って、file_get_contents以外に何かありますでしょうか? やりたいこと、というか今考えているフローとしては、 (1)ページにアクセスしてきたユーザー情報をhoge.phpで取得(hoge.php) (2)取得した情報を書き込み用のfuga.phpにPOSTで渡す(hoge.php) (3)fuga.phpでPOSTを受け取り、POST情報を元に地域情報を取得(fuga.php) (4)POSTで受け取った情報と地域情報を合体させてログファイルに書き込み(fuga.php) ということでやってみようとしています。 PHP自体はなんとか動くところまできて、ログの書き込み自体はなんとかうまくできているようなんですが、実際にアクセスされるページが重くなってしまいました。 色々と調べてみたりこねくり回してみてわかったのは、どうも(3)の部分で時間がかかっているようです。大量のデータから地域情報を抽出するので、しかたないのかなとは思いつつも、実際アクセスされるページの表示はサクッと表示されたいと考えています。 なんとかできないものかと考えているのですが、どうやら(2)でPOST送信するために使っているfile_get_contentsが、fuga.phpからの情報を受け取るためにfuga.phpの処理が終わるのを待っているのではないかというところにようやく行きつきました。 別に戻り値を必要とするわけではなく、hoge.phpからfuga.phpへ投げっぱなしジャーマンのようにしたいのですが、方法はありますでしょうか? いろいろググってみたのですが、戻り値を受け取るための情報はあるのですが、受け取らないで投げっぱなしにする情報が見当たりません。 なにぶん素人なため、説明もわかりにくいと思いますが、ごうかご助言よろしくお願いします。 サンプル的なソースや情報など、素人にもわかる形でよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ○○.gifの作成について

    脳内メーカで、名前にhogeと入力し、表示された画像のへのURLを見ると http://usokosystem.com/img/hoge.gif 名前にfooと入力すると、 http://usokosystem.com/img/foo.gif となります。 また、http://usokosystem.com/img/○○.gif (○○は適当な変数) という形で直接画像ファイルにアクセスしても、○○の脳内という画像が表示されます。 こういう機能をPHPで作成したいのですが、どのように考えればいいのでしょうか? 画像の処理はなるたけimagickでやりたいです。 環境 ubuntu 8.10 apache 2.2 PHP5 PHP5にはimagick、GDを使用可能にしています。

    • 締切済み
    • PHP
  • PHPからの戻り値について

    javascriptで php実行後の戻り値(画像パス)を txt = xmlhttp.responseText で取得し document.getElementById('img').src = txt; で画像を表示させようとしているのですが、 表示できない状態です。 alert(txt); で中身を確認したところ、 img/01.jpg となっており期待した値が帰っていることを確認しました。 ただブラウザの画像表示領域のプロパティでURLを確認したところ、 http://localhost/user/img/01.jpgと表示されていました。 一応コピーして、テキストに貼り付けた所 http://localhost/user/?img/01.jpgになっており "?"ついていました。 回避しようと思って txt.replace( /[?]/, '' ); をしてみましたが、結果は変わりませんでした。 多分原因はこれだろうと思うのですが、回避方法がわかりません。 ちなみにalert(txt);では'?'は出力されていません。

専門家に質問してみよう