PHP 携帯サイトで画像の保存・コピー・転送を禁止する


携帯サイトで画像の保存・コピー・転送を禁止する(jpegのみ)

画像の保存・コピー・転送を禁止するため、PHPで画像を吐き出すプログラムを書きました。

http://www.plusmb.jp/2008/10/17/784.html

を参考に、というかほぼ同じです。。

下記2点追加しています。

  • 画像サイズの変更
  • ソフトバンクのheaderにno-store
image.php
<?php
$file_path = $_SERVER['DOCUMENT_ROOT'].'../photo/'.$_GET['filename'];
// ファイルの存在チェック
if ((!file_exists($file_path)) || ($file_path == '')) {
echo 'Error : File not exists.';
exit;
}
// 拡張子の取得
$pathinfo = pathinfo($file_path);
if (empty($pathinfo['extension'])) {
echo 'Error : Extention not exists in file name.';
exit;
}
// 画像ファイルのmimetypeを確認
$imageInfo = getimagesize($file_path);
$mimeType = image_type_to_mime_type($imageInfo[2]);
// 画像リサイズ
switch ($pathinfo['extension']) {
case "jpeg":
case "jpg":
if ($mimeType !== 'image/jpeg') {
echo 'Error : This file is not jpeg file.';
exit;
}
$img = imagecreatefromjpeg($file_path);
break;
default:
echo 'Error : This file is not allowed file type.';
exit;
break;
}
//画像の縦・横幅取得
$width  = ImageSx($img);
$height = ImageSy($img);
//拡大縮小率(横幅を100pxにする)
$resize_num = 100/$width;
$img_out = ImageCreateTrueColor($width*$resize_num, $height*$resize_num);
ImageCopyResampled($img_out, $img, 0,0,0,0, $width*$resize_num, $height*$resize_num, $width, $height);
// ユーザーエージェント判別
$userAgent = $_SERVER['HTTP_USER_AGENT'];
if (preg_match('/^DoCoMo/', $userAgent)) {
$agent_carrier = 'i';
} elseif (preg_match('/^(J\-PHONE|Vodafone|SoftBank|MOT\-)/', $userAgent)) {
$agent_carrier = 's';
} elseif (preg_match('/^(KDDI\-|UP\.Browser)/', $userAgent)) {
$agent_carrier = 'e';
} else {
echo 'Error : Out of allowed carrier.';
exit;
}
// DoCoMo,auの場合は後処理でバッファ取得のためバッファ機能を有効化
if ($agent_carrier == 'i' or $agent_carrier == 'e'){
// バッファ機能を有効化
ob_start();
}
// JPEGヘッダ出力
header("Content-Type: image/jpeg");
// ソフトバンクの場合は画像保存防止のヘッダを書き出す
if ($agent_carrier == 's'){
// ソフトバンク向け画像保存防止処理
header("x-jphone-copyright: no-store, no-transfer, no-peripheral");
}
// 画像出力
imagejpeg($img_out);
// DoCoMo,auの場合は画像バイナリに書き込み
if ($agent_carrier == 'i' or $agent_carrier == 'e'){
// バッファデータの取得
$buffer = ob_get_clean();
// バイナリのコメント部以外を抽出
$part1 = explode("\xFF\xFE", $buffer, 2);
$part2 = explode("\xFF", $part1[1], 2);
// コメント部を上書き
if ($agent_carrier == 'i') {
// 000Bは「copy="NO"」の文字列バイト数(9) + 2 = 13 の16進数
$buffer = $part1[0] . "\xFF\xFE\x00\x0Bcopy=\"NO\"\xFF" . $part2[1];
} elseif ($agent_carrier == 'e') {
// 0013は「kddi_copyright=on」の文字列バイト数(17) + 2 = 19 の16進数
$buffer = $part1[0] . "\xFF\xFE\x00\x13kddi_copyright=on\xFF" . $part2[1];
}
// バッファ出力
print $buffer;
}
// メモリ解放
imagedestroy($img_out);
?>
画像表示してみる

下記のようにファイル名を指定して画像を表示します。

http://xxxx/image.php?filename=ファイル名

  • docomo

コピー・転送禁止となります。

docomoは保存禁止にできません。

  • au

コピー・転送禁止となります。

保存禁止にしたい場合は、

imgタグにcopyright=”yes”をつけることで、保存禁止にできます。

<img src="http://xxxx/image.php?filename=ファイル名" copyright="yes"/>

  • softbank

保存禁止 or コピー・転送禁止となります。

※no-storeは一部の端末では利用できないため。

  • このエントリーをはてなブックマークに追加

コメントをどうぞ

メールアドレスが公開されることはありません。