今朝、Concrete5 Web サイトを運営しているクライアントからの電話で目が覚めました。Web サイトにアップロードされた画像が突然機能しなくなったということです。1、2 時間の実験と調査の後、私は問題の根本原因に気付きました。数日前、このクライアントは、すべての画像に GPS EXIF データを記録する新しい携帯電話 (A Samsung Epic) を入手しました。彼女はこの携帯電話をカメラとして使用していましたが、何らかの理由で画像に GPS データが含まれていると、Concrete5 が爆発します。これは、GPS データが文字列ではなく配列として格納されているためだと思われます。
GPS EXIFデータが存在する場合、EXIFデータを削除するための一般的な機能に取り組もうとしています。これが私がこれまでに持っているものです(これは 内にありますtools/files/importers
):
$fileExtension = strtolower(substr($_FILES['Filedata']['name'], strrpos($_FILES['Filedata']['name'], '.')));
if ($fileExtension == ".jpg" || $fileExtension == ".jpeg"){
/* File is a JPEG */
if (exif_read_data($_FILES['Filedata']['tmp_name'], 'GPS') !== false){
/* File contains GPS EXIF data */
if (extension_loaded('magickwand') && function_exists("NewMagickWand")) {
/* ImageMagick is installed and working */
$img = new Imagick($_FILES['Filedata']['tmp_name']);
$img->stripImage();
$img->writeImage($_FILES['Filedata']['tmp_name']);
$img->clear();
} elseif (extension_loaded('gd') && function_exists('gd_info')) {
/* GD is installed and working */
$img = imagecreatefromjpeg($_FILES['Filedata']['tmp_name']);
imagejpeg ($img, $_FILES['Filedata']['tmp_name']);
} else {
/* Neither ImageMagick nor GD are installed */
die('No appropriate image handler to remove EXIF data');
}
}
}
このコードを配置しても、画像をアップロードすると EXIF データが残ります。コード全体にコマンドを配置die()
して、コードがどのパスをたどっているかを正確に把握しようとしました。この特定のサーバーでは、if (extension_loaded('magickwand') && function_exists("NewMagickWand"))
ブロックに入ることはありませんが、elseif (extension_loaded('gd') && function_exists('gd_info'))
ブロックに入ります。したがって、私の ImageMagick コードは問題ないかもしれませんが、GD が EXIF データを適切に削除していないようです。
ImageMagick/GD または PHP と EXIF データの経験がある人はいますか?