Return to test.txt CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / exif |
1.1 ! misho 1: <?php ! 2: ! 3: /* Test script for PHP module ext/exif ! 4: * ! 5: * (c) Marcus Boerger, 2002 ! 6: * ! 7: * $Id: test.txt 72965 2002-03-12 16:43:29Z helly $ ! 8: * ! 9: * Rename the file to test.php and read the instructions. If the ! 10: * script cannot be executed or does not generate any output check ! 11: * you error log. In most cases this would mean you found an error ! 12: * if the rest of your php environment works fine. ! 13: * ! 14: * The original version of module exif has many errors and mostly ! 15: * fails on executing this script. ! 16: */ ! 17: ! 18: $file = array_key_exists('thumbnail',$_REQUEST) ? $_REQUEST['thumbnail'] : ''; ! 19: //$file = '/t/temp/kodak-dc4800.tif'; ! 20: //$file = '/t/temp/canon-ixus.jpg'; ! 21: //$file = '/t/temp/test2.jpg'; ! 22: if ( $file) { ! 23: $image = exif_thumbnail($file); ! 24: if ( $image!==false) { ! 25: @Header("content-type: image/jpeg"); ! 26: echo $image; ! 27: } else { ! 28: echo "<html><body><table>\n"; ! 29: echo "Thumbnail could not be extracted.\n"; ! 30: echo "</table></body></html>"; ! 31: } ! 32: die(); ! 33: } ! 34: ! 35: if ( !defined('IMAGETYPE_GIF')) define('IMAGETYPE_GIF',1); ! 36: if ( !defined('IMAGETYPE_JPEG')) define('IMAGETYPE_JPEG',2); ! 37: if ( !defined('IMAGETYPE_TIFF_II')) define('IMAGETYPE_TIFF_II',7); ! 38: if ( !defined('IMAGETYPE_TIFF_MM')) define('IMAGETYPE_TIFF_MM',8); ! 39: ! 40: $possible = array(); ! 41: ! 42: /****************************************************************************/ ! 43: // message function is used for debugging purpose: just to se what happens ! 44: function message($msg) { ! 45: error_log($msg,0); ! 46: echo "$msg\n"; ! 47: } ! 48: ! 49: function error_msg() { ! 50: $ret = '<b style="color:green">O.K.</b>'; ! 51: if (array_key_exists('php_errormsg',$GLOBALS) && strlen($GLOBALS['php_errormsg'])) { ! 52: $ret = '<b style="color:red">'.$GLOBALS['php_errormsg'].'</b>'; ! 53: $GLOBALS['php_errormsg'] = ''; ! 54: } ! 55: return $ret; ! 56: } ! 57: ! 58: /****************************************************************************/ ! 59: // private to function search_file() ! 60: function _search_file($root,&$possible,$path='') { ! 61: $sub = array(); ! 62: $cnt = 0; ! 63: $type= false; ! 64: ! 65: //error_log("search_file($root,$path)",0); ! 66: if ($dir = @opendir($root.$path.'/')) { ! 67: while (($found = @readdir($dir)) !== false) { ! 68: $type = @filetype($root.$path.'/'.$found); ! 69: //error_log("search_file($root$path):$type=$found",0); ! 70: switch( $type) { ! 71: case 'file': ! 72: $pos = strrpos($found,'.'); ! 73: if ( function_exists('exif_imagetype')) { ! 74: $type = exif_imagetype($root.$path.'/'.$found); ! 75: } else { ! 76: if ( $pos!==false) { ! 77: $type = GetImageSize($root.$path.'/'.$found); ! 78: if ( is_array($type)) { ! 79: $type = $type[2]; ! 80: } else { ! 81: $type = false; ! 82: } ! 83: } else $type = false; ! 84: } ! 85: if ( $type!==false) ! 86: { ! 87: $possible[] = array('file'=>$root.$path.'/'.$found, 'type'=>$type); ! 88: //error_log("search_file($root$path) add:$path/$found",0); ! 89: if ( ($cnt=count($possible)) % 100 == 0) { ! 90: error_log("exif test page - counting files: $cnt",0); ! 91: } ! 92: } ! 93: break; ! 94: case 'dir': ! 95: if ( $found!='.' && $found!='..') { ! 96: $sub[count($sub)] = $found; ! 97: } ! 98: break; ! 99: } ! 100: } ! 101: @closedir($dir); ! 102: foreach( $sub as $idx => $found) { ! 103: _search_file($root,$possible,$path.'/'.$found); ! 104: } ! 105: } ! 106: } ! 107: ! 108: /****************************************************************************/ ! 109: // function: search_file($file,$ext) ! 110: // ! 111: // Searches for $file in document tree. The path is ignored. ! 112: // ! 113: function search_file() { ! 114: global $argc, $argv; ! 115: $possible = array(); ! 116: ! 117: if ( $argc > 1) { ! 118: $path = $argv[1]; ! 119: } else if ( array_key_exists('SCRIPT_FILENAME',$_SERVER)) { ! 120: $path = $_SERVER['SCRIPT_FILENAME']; ! 121: //error_log("SCRIPT_FILENAME($path)",0); ! 122: } else { ! 123: $path = $argv[0]; ! 124: //error_log("argv($path)",0); ! 125: } ! 126: if ( ($p=strpos($path,'?')) !== false) $path = substr($path,0,$p); ! 127: if ( ($p=strrpos($path,'/')) /*< strlen($path)-1*/) $path = substr($path,0,$p); ! 128: error_log("exif test page - counting files in $path"); ! 129: _search_file($path,$possible); ! 130: error_log("exif test page - counting files: ".count($possible)." done.",0); ! 131: return $possible; ! 132: } ! 133: ! 134: /****************************************************************************/ ! 135: // function: search_file($file,$ext) ! 136: // ! 137: // Searches for $file in document tree. The path is ignored. ! 138: // ! 139: function AddInfo($Name,$Value,$highlight=0) { ! 140: if (is_array($Value)) $Value = 'Array: ('.join(',',$Value).')'; ! 141: $Value = nl2br($Value); ! 142: if ( $highlight) { ! 143: $Name = "<th>$Name</th>"; ! 144: } else { ! 145: $Name = "<td>$Name</td>"; ! 146: } ! 147: return "<tr>$Name<td>$Value </td></tr>\n"; ! 148: } ! 149: ! 150: $possible = search_file(); ! 151: ! 152: $title = "PHP module exif test page"; ! 153: ! 154: ?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional"> ! 155: <html> ! 156: <head> ! 157: <title><?=$title ?></title> ! 158: <style type="text/css"> ! 159: body { ! 160: font-size: 12pt; ! 161: } ! 162: h1 { ! 163: font-size: 20pt; ! 164: font-weight:bold; ! 165: } ! 166: h2 { ! 167: font-size: 16pt; ! 168: font-weight:bold; ! 169: } ! 170: th { ! 171: text-align: left; ! 172: } ! 173: ul { ! 174: margin-bottom: 6pt; ! 175: } ! 176: </style> ! 177: </head> ! 178: <body> ! 179: <h1><?=$title ?></h1> ! 180: <h2>(c) Marcus Börger, 2002</h2> ! 181: </p> ! 182: <p> ! 183: Images taken from <a href="http://www.exif.org">www.exif.org</a>, ! 184: <a href="http://marcus-boerger.de">marcus-boerger.de</a> ! 185: all rights reserved by their authors and artists, see exif headers. ! 186: The files can be downloaded <a href="http://marcus-boerger.de/php/ext/exif/test/">here</a>. ! 187: To start the test you simple have to put all images into the same directory as this script. ! 188: The test will work with all files in that directory and all subdirectories. To test private ! 189: images just put them into that directory. ! 190: </p> ! 191: <p> ! 192: Youmay take a look at the test <a href="http://marcus-boerger.de/php/ext/exif/test.txt">source here</a>. ! 193: </p> ! 194: <p> ! 195: This test just prooves that some exif headers can be scanned. ! 196: If all files produce a header in output the module might be o.k. ! 197: </p> ! 198: <p> ! 199: What to look for in detail: ! 200: </p> ! 201: <ul> ! 202: <li>kodak-dc4800-plus-acdsee.jpg ! 203: <ul> ! 204: <li>should provide a <b>long</b> comment 'by marcus börger<%04i>'*n</li> ! 205: <li>this file returns an array but it also produces an errormessage because ACDSee destroys ! 206: the integrity of IFD directory (size of directory and offsets of entries following any ! 207: edited entry maybe wrong). ! 208: </li> ! 209: </ul> ! 210: </li> ! 211: <li>hp-photosmart.jpg ! 212: <ul> ! 213: <li>should provide a <b>two line</b> copyright notice</li> ! 214: </ul> ! 215: </li> ! 216: <li>olympus-d320l ! 217: <ul> ! 218: <li>should provide an <b>APP12</b> infoset</li> ! 219: </ul> ! 220: </li> ! 221: <li>unknown.jpg ! 222: <ul> ! 223: <li>should provide an <b>empty</b> comment, this is a comment section and not an IFD0, EXIF or GPS section</li> ! 224: </ul> ! 225: </li> ! 226: <li>some images ! 227: <ul> ! 228: <li>have empty fields, that is the tag is present but no data is stored</li> ! 229: </ul> ! 230: </li> ! 231: </ul> ! 232: <h2>function exif_tagname</h2> ! 233: <table border='1' cellspacing='0' cellpadding='3' summary="EXIF headernames"> ! 234: <?php ! 235: if (function_exists('exif_tagname')) { ! 236: ?> ! 237: <tr><td>ImageWidth</td><td><?=@exif_tagname(0x0100)?></td><td><?=error_msg()?></td></tr> ! 238: <tr><td>JPEGProc</td><td><?=@exif_tagname(0x0200)?></td><td><?=error_msg()?></td></tr> ! 239: <tr><td>SceneType</td><td><?=@exif_tagname(0xA301)?></td><td><?=error_msg()?></td></tr> ! 240: <tr><td>false</td><td><?=@exif_tagname(0x0000)===false?'false':'value'?></td><td><?=error_msg()?></td></tr> ! 241: <?php ! 242: } else { ! 243: echo "<tr><td>function exif_tagname is not supported</td></tr>\n"; ! 244: } ! 245: ?> ! 246: </table> ! 247: <br clear="all"> ! 248: <h2>function exif_read_data for <?=count($possible)?> images</h2> ! 249: ! 250: <?php ! 251: $check_getimagesize = false; ! 252: $check_exif_thumbnail = true; ! 253: $check_exif_read_data = false; ! 254: $fast_output = false; ! 255: if (function_exists('exif_read_data')) { ! 256: $num = 0; ! 257: echo "<table border='1' cellspacing='0' cellpadding='3' summary='function results'>\n"; ! 258: $tab2 = "";//"<table border='1' cellspacing='0' cellpadding='3' summary='EXIF information'>\n"; ! 259: $types = array('','GIF','JPEG','PNG','SWF','PSD','BMP','TIFF_II','TIFF_MM','JPC','JP2','JPX','JB2'); ! 260: foreach($possible as $idx => $file) { ! 261: $type = $file['type']; ! 262: $file = $file['file']; ! 263: if ( !((++$num)%100)) error_log("exif test page - checking files: $num",0); ! 264: $error = ''; ! 265: $len = 2; ! 266: $rows = 1 ! 267: + ($check_getimagesize ? 1 : 0) ! 268: + ($check_exif_thumbnail ? 1 : 0) ! 269: + ($check_exif_read_data ? 1 : 0); ! 270: if ( !$fast_output) echo "<tr><td rowspan='$rows' valign='top'>$num</td><th colspan='2'>$file</th></tr>\n"; ! 271: if ($check_getimagesize) { ! 272: $len++; ! 273: $size = GetImageSize($file); ! 274: $error = error_msg();// clear message ! 275: if ( $size === false) { ! 276: $error = '<b style="color:red">GetImageSize returned false</b><br>'.$error; ! 277: $res_getimagesize = $error; ! 278: } else { ! 279: $res_getimagesize = '('.join($size,',').')'; ! 280: } ! 281: if ( !$fast_output) echo AddInfo("GetImageSize",$error,1); ! 282: } ! 283: if ( $check_exif_thumbnail) { ! 284: $len++; ! 285: if ($type!=IMAGETYPE_JPEG) {// && $type!=IMAGETYPE_TIFF_II && $type!=IMAGETYPE_TIFF_MM) { ! 286: $error = "<b style='color: green'>filetype not supported: $types[$type]</b>"; ! 287: $res_exif_thumbnail = $error; ! 288: } else { ! 289: $t_width = 0; ! 290: $t_height = 0; ! 291: $result = exif_thumbnail($file, $t_width, $t_height); ! 292: $error = error_msg();// clear message ! 293: if ( $result === false) { ! 294: $error = '<b style="color:red">exif_thumbnail returned false</b><br>'.$error; ! 295: if ( $t_width && $t_height) { ! 296: $error = "<b style='color:green'>$t_width x $t_height</b><br>$error"; ! 297: } ! 298: $res_exif_thumbnail = $error; ! 299: } else { ! 300: $res_exif_thumbnail = $t_width . " x " . $t_height; ! 301: } ! 302: } ! 303: if ( !$fast_output) echo AddInfo("exif_thumbnail",$error,1); ! 304: } ! 305: if ($check_exif_read_data) { ! 306: $len++; ! 307: if ($type!=IMAGETYPE_JPEG && $type!=IMAGETYPE_TIFF_II && $type!=IMAGETYPE_TIFF_MM) { ! 308: $res_exif_read_data = "<b style='color: green'>filetype not supported: $types[$type]</b>"; ! 309: if ( !$fast_output) echo AddInfo("exif_read_data",$res_exif_read_data); ! 310: $res = ''; ! 311: } else { ! 312: $image = exif_read_data($file,'COMMENT,IFD0,EXIF,APP12',true); ! 313: $error = error_msg();// clear message ! 314: if ( !$fast_output) echo AddInfo("exif_read_data",$error,1); ! 315: $res = ''; ! 316: if ( $image === false) { ! 317: $res_exif_read_data = "<b style='color:red'>exif_read_data returned false</b><br>$error"; ! 318: } else { ! 319: $res_exif_read_data = $error; ! 320: // ah no!$error = error_msg(); // force o.k. ! 321: foreach($image as $Name => $Value) { ! 322: if ( $Name!='Thumbnail') { ! 323: if ( is_array($Value)) { ! 324: $len++; ! 325: $res .= AddInfo($Name,'Array('.count($Value).')'); ! 326: foreach( $Value as $idx => $Entry) { ! 327: if ($idx==='Thumbnail') $Entry = '<data>'; ! 328: $len++; ! 329: $res .= AddInfo($Name.':'.$idx,$Entry); ! 330: } ! 331: } else { ! 332: $len++; ! 333: $res .= AddInfo($Name,$Value); ! 334: } ! 335: } ! 336: } ! 337: } ! 338: } ! 339: } ! 340: $tab2 .= "<tr><td rowspan='$len' valign='top'>$num</td></tr>\n"; ! 341: $tab2 .= "<tr><th colspan='2'>$file</th></tr>\n"; ! 342: if ($check_getimagesize) { ! 343: $tab2 .= "<tr><th>GetImageSize</th><td>$res_getimagesize</td></tr>\n"; ! 344: } ! 345: if ($check_exif_thumbnail) { ! 346: $tab2 .= "<tr><th>exif_thumbnail</th><td>$res_exif_thumbnail</td></tr>\n"; ! 347: } ! 348: if ($check_exif_read_data) { ! 349: $tab2 .= "<tr><th>exif_read_data</th><td>$res_exif_read_data</td></tr>\n"; ! 350: $tab2 .= $res; ! 351: } ! 352: if ( $fast_output) { ! 353: echo $tab2; ! 354: $tab2 = ''; ! 355: } ! 356: } ! 357: error_log("exif test page - checking files: ".count($possible)." done.",0); ! 358: echo $tab2; ! 359: echo "</table>\n"; ! 360: } else { ! 361: echo "<h1 style='color:red'>function exif_read_data is not supported</h1>\n"; ! 362: } ! 363: ?> ! 364: </body> ! 365: </html>