Annotation of embedaddon/php/ext/exif/test.txt, revision 1.1.1.2

1.1       misho       1: <?php
                      2: 
                      3: /* Test script for PHP module ext/exif
                      4:  *
                      5:  * (c) Marcus Boerger, 2002
                      6:  *
1.1.1.2 ! misho       7:  * $Id$
1.1       misho       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>