File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / exif / test.txt
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:34:37 2012 UTC (12 years, 10 months ago) by misho
Branches: php, MAIN
CVS tags: v5_4_3elwix, v5_4_29p0, v5_4_29, v5_4_20p0, v5_4_20, v5_4_17p0, v5_4_17, HEAD
php 5.4.3+patches

    1: <?php
    2: 
    3: /* Test script for PHP module ext/exif
    4:  *
    5:  * (c) Marcus Boerger, 2002
    6:  *
    7:  * $Id: test.txt,v 1.1.1.2 2012/05/29 12:34:37 misho Exp $
    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&nbsp;</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&ouml;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&ouml;rger&lt;%04i&gt;'*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 = '&lt;data&gt;';
  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>

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>