2010-11-24 9 views
1

ロゴ画像をメールニュースレターに追加して追跡画像として使用する予定です。この画像は私のサイト(例えばmy_logo.gif)でホストされ、電子メールのhtmlで参照されます(eq。<img src="http://www.example.com/my_logo.gif" />)。その画像がアクセス/閲覧されたときに私に電子メールを送るスクリプトをPHPで作成したいと思います。これは可能ですか?もしそうなら、どうですか?サイトから画像(または任意の種類のファイル)にアクセスしてメールで通知する場合

これを完了するすべてのアイデアや提案は大歓迎です。

答えて

3

RewriteEngine On 
RewriteRule ^(.+\.jpg)$ image.php?image=$1 [nocase] 

は、同じディレクトリ内のファイルimage.phpにこのような何かを置く:

// send email here 

header('Content-Type: image/jpeg'); 
readfile($_GET['image']); 

これは単純な例です$_GET['image']の変数を検証して、同じディレクトリにある画像であることを確認してください。そうでなければ、このスクリプトを悪用して読むことができるかもしれません他のディレクトリのファイル(image.php?image=../../../passwords)。

+0

すばらしい解決策。私は今それを実装した後に質問があります...私の検証は厳密に私の.htaccessファイルにこの行を追加することができますか:RewriteCond%{REQUEST_FILENAME} -f またはimage.phpファイルでまだ検証が必要ですか?答えが後者の場合、どうすればこのことを提案しますか? – ServAce85

+0

@Serv **常に**すべてのパスを確認してください!誰でも 'image.php'ファイルを直接呼び出すだけで、RewriteCondを完全に回避することができます。あなたはSOのパスを検証するためのソリューションを見つけることができますが、['realpath'](http://php.net/realpath)を使用し、パスの先頭がイメージディレクトリ(' substr($パス、0,13)== '/ foo/bar/img /' ')は基本的にそれを行います。 – deceze

+0

ご協力ありがとうございます。 – ServAce85

0
//Display image 
$image=imagecreatefromjpeg('my_logo.jpg'); 
header('Content-Type: image/jpeg'); 
imagejpeg($image); 

//logging or notifying stuff here 
// ... 

、ちょうどあなたがいつでもPHPファイルトラック/メール/おそらくPHPファイルにリンクすることが容易にかつ前方にそれを持っているか、画像自体を提示し、カウントう<img src="script.php" />

+1

jpegを読み込んで同じjpegを出力する場合は、gd関数を遠くにスキップしてそのままファイルをダンプすることができます。 – deceze

-1

のように、このスクリプトにリンクアクセスされます。

0

あなたがreadfile()機能を使用して、適切なコンテンツタイプヘッダを送信することによって、これを達成することができます

0

を.htaccessファイルを経由して、.jpgファイルへの要求をリダイレクトし、など、それを数えることができます。画像がブラウザに送信される前または後に、他のプログラムコードを実行することができます。

次のプログラムコードの実行時間が長い場合は、output controlの機能を調べることをお勧めします。画像ディレクトリ内の.htaccessファイルに次のようなものを入れて

関連する問題