![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
PHPを使って2つの画像ファイルが異なるファイルであることを判定するプログラムを考えています。以下のように、画像ファイルを文字列として扱い、md5ハッシュ値を取得し、それを比較することで、画像ファイルが違うということを判別しています。
こちらですが、もし他に良いロジックをご存知の方がいらっしゃいましたら、ご意見いただければと思います。
よろしくお願いいたします。
<?php
$hash1 = getMD5('hoge1.jpg');
$hash2 = getMD5('hoge2.jpg');
if ($hash1 == $hash2) {
echo "同じ画像ファイルです。";
} else {
echo "同じ画像ファイルではありません。";
}
// 画像ファイルを文字列として扱い、
// md5ハッシュ値を取得する関数
function getMD5($image) {
$fp = fopen($image, 'r');
$str = '';
while(!feof($fp)) {
# 画像ファイルを1行ずつ読み込んで、文字列にする
$str .= fgets($fp);
}
fclose($fp);
// $strのmd5ハッシュ値を得る
return md5($str);
}
?>
No.4
- 回答日時:
この場合 == でも、=== でもどちらでもいい。
習慣的に === を使うのはいいことだと思いますが。
そんなものより、FALSE が返ってきてるかどうかを[厳密に]調べる必要があるのでは?
> 画像ファイルを文字列として扱い
暗号化は単なる比較目的で使用するものではない。
(binary)file_get_contents($img1) === (binary)file_get_contents($img2)
ファイルの差分が必要な場合は xdiff
No.3
- 回答日時:
質問の回答にはなっていませんので、ご了承ください。
ちょっとした、ゴミプロ作ってみました。
別の関数使っても結果が同じになるという例です。
あ、そうそう、そういえば、#2さんがやっているように、
文字列の比較は「===」か「strcmp()」使うのが、いいらしいです。
strcmp()を使うのが鉄則。みたいな言い方をしている人もいますが、ホントのとこは俺は知りません。
文字列の比較に「==」を使うと 動作がキモいらしいです。まぁ、ケースバイケースだと思いますが。
http://d.hatena.ne.jp/hnw/20080606
「strcmp()」も 場合によって 良くないらしいです。
http://d.hatena.ne.jp/hnw/20090123
===========================================================
<html>
<head>
<meta http-equiv=content-type content=text/html; charset=utf-8>
</head>
<body>
<?
$me = $_SERVER[PHP_SELF];
$ImageFile = "icon.gif";
$Str = file_get_contents($ImageFile);
//---------------------------------------------------------
$md01 = md5($Str);
$md02 = md5_file($ImageFile);
print "$md01<br>$md02<hr>";
//---------------------------------------------------------
$len01 = filesize($ImageFile);
$len02 = strlen($Str);
print "$len01<br>$len02<hr>";
//---------------------------------------------------------
?>
</body>
</html>
===========================================================
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_02.png?5a7ff87)
No.2
- 回答日時:
md5_file()
こちらの関数でハッシュ値を比較してみてはいかがでしょうか。
<?php
if(md5_file('hoge1.jpg') === md5_file('hoge2.jpg')){
echo "同じ画像ファイルです。";
}else{
echo "同じ画像ファイルではありません。";
}
?>
参考URL:http://php.net/manual/ja/function.md5-file.php
No.1
- 回答日時:
とりあえず、そちらの書いたソースの
$fp = fopen($image, 'r');
$str = '';
while(!feof($fp)) {
# 画像ファイルを1行ずつ読み込んで、文字列にする
$str .= fgets($fp);
}
fclose($fp);
は、よほど PHPのバージョンが古くない限りは、
$str = file_get_contents($image);
一行で済みます。
どの程度の精度を求めているのか分からないので、かなりテキトーです。
大雑把に filesize() で分けてしまうとか、
GD が入ってる必要がありますが、imagecreatefromjpeg() とかして、imagesx() , imagesy() で 画像の縦横の大きさを比べるとか、
そんな程度しか思いつきません。
できるかどうかは分かりませんが、ハッシュを使わずに、そのまま文字列として比較するっていう乱暴な方法もあるかもしれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- PHP 掲示板を作成しておりアップロードファイルとメッセージを並べたいので、アドバイスお願い致します 2 2023/07/17 21:01
- PHP $filePath = './user_img/' . $file['name'];? 1 2022/12/10 07:29
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- その他(ソフトウェア) コマンドプロンプトについて教えてください。 状況: 画像編集ソフト上でネットから保存した画像を使うの 3 2022/05/26 11:14
- その他(ソフトウェア) 画像のファイル形式、拡張子が変わると、性能が変わると思うのですが、ファイル名の「jpg、png、do 8 2022/08/10 13:37
- PHP 画像ファイルの名前をそのままURLにする 3 2022/10/16 11:18
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XMLのロードに失敗する
-
ファイル名は、数字の「0」(...
-
二次元配列のソートのやり方が...
-
PHPでテキストファイルかどうか...
-
テキストファイルの読み込みと...
-
PHPでの別のサーバーのテキスト...
-
shift-jisでfgetcsv
-
2つの画像ファイルが異なるファ...
-
日本語のデータが文字化けをし...
-
PHPのif文でその処理を途中で抜...
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
.phpと.incファイルの違いはな...
-
拡張子php画像をjpg画像等に変...
-
プリクラの設置してある場所
-
URLが.PHPってどういう...
-
透過PNGが透過されない!!
-
phpの処理中に画面表示ををする...
-
PHPでsimplexml_load_fileの引...
-
バッチを用いたフォルダの自動移動
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPでFilename cannot be empty...
-
2つの画像ファイルが異なるファ...
-
phpのftp_get()でエラーが出ます。
-
ファイルの行数取得
-
stat failed
-
ファイル名は、数字の「0」(...
-
XMLのロードに失敗する
-
日本語が文字化けしないよう読...
-
shift-jisでfgetcsv
-
別のサーバにあるファイルの存...
-
Smartyで吐き出されたhtmlソー...
-
PHPでテキストファイルかどうか...
-
PHPでの別のサーバーのテキスト...
-
PHPでAPI 出力はCSVを取得する...
-
値の取り出し方について教えて...
-
FirefoxでFormのfileでファイル...
-
PHPのファイル操作
-
日本語のファイルが開けない
-
Warning: preg_match_allの他に...
-
TSVファイルをCSV形式に変換したい
おすすめ情報