mirror of
https://github.com/php/php-src.git
synced 2024-10-12 03:52:33 +00:00
272 lines
7.6 KiB
Plaintext
272 lines
7.6 KiB
Plaintext
<?php
|
|
|
|
/* Test script for PHP module ext/exif
|
|
*
|
|
* (c) Marcus Boerger, 2002
|
|
*
|
|
* Rename the file to test.php and read the instructions. If the
|
|
* script cannot be executed or does not generate any output check
|
|
* you error log. In most cases this would mean you found an error
|
|
* if the rest of your php environment works fine.
|
|
*
|
|
* The original version of module exif has many errors and mostly
|
|
* fails on executing this script.
|
|
*/
|
|
|
|
$file = array_key_exists('thumbnail',$_REQUEST) ? $_REQUEST['thumbnail'] : '';
|
|
//$file = '/t/temp/kodak-dc4800.tif';
|
|
//$file = '/t/temp/canon-ixus.jpg';
|
|
if ( $file) {
|
|
$image = exif_thumbnail($file);
|
|
if ( $image!==false) {
|
|
@Header("content-type: image/jpeg");
|
|
echo $image;
|
|
} else {
|
|
echo "<html><body><table>\n";
|
|
echo "Thumbnail could not be extracted.\n";
|
|
echo "</table></body></html>";
|
|
}
|
|
die();
|
|
}
|
|
|
|
$possible = array();
|
|
|
|
/****************************************************************************/
|
|
// message function is used for debugging purpose: just to se what happens
|
|
function message($msg) {
|
|
error_log($msg,0);
|
|
echo "$msg\n";
|
|
}
|
|
|
|
function error_msg() {
|
|
$ret = '<b style="color:green">O.K.</b>';
|
|
if (array_key_exists('php_errormsg',$GLOBALS) && strlen($GLOBALS['php_errormsg'])) {
|
|
$ret = '<b style="color:red">'.$GLOBALS['php_errormsg'].'</b>';
|
|
$GLOBALS['php_errormsg'] = '';
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
/****************************************************************************/
|
|
// private to function search_file()
|
|
function _search_file($root,&$possible,$path='') {
|
|
$sub = array();
|
|
|
|
//error_log("search_file($root,$path)",0);
|
|
if ($dir = @opendir($root.$path.'/')) {
|
|
while (($found = @readdir($dir)) !== false) {
|
|
$type = @filetype($root.$path.'/'.$found);
|
|
//error_log("search_file($root$path):$type=$found",0);
|
|
switch( $type) {
|
|
case 'file':
|
|
$pos = strpos($found,'.');
|
|
if ( $pos !== false
|
|
&& ( strtolower(substr($found,$pos+1))=='jpg'
|
|
|| strtolower(substr($found,$pos+1))=='tif'
|
|
)
|
|
)
|
|
{
|
|
$possible[] = $root.$path.'/'.$found;
|
|
//error_log("search_file($root$path) add:$path/$found",0);
|
|
}
|
|
break;
|
|
case 'dir':
|
|
if ( $found!='.' && $found!='..') {
|
|
$sub[count($sub)] = $found;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
@closedir($dir);
|
|
foreach( $sub as $idx => $found) {
|
|
_search_file($root,$possible,$path.'/'.$found);
|
|
}
|
|
}
|
|
}
|
|
|
|
/****************************************************************************/
|
|
// function: search_file($file,$ext)
|
|
//
|
|
// Searches for $file in document tree. The path is ignored.
|
|
//
|
|
function search_file() {
|
|
global $argv;
|
|
$possible = array();
|
|
|
|
if ( array_key_exists('SCRIPT_FILENAME',$_SERVER)) {
|
|
$path = $_SERVER['SCRIPT_FILENAME'];
|
|
//error_log("SCRIPT_FILENAME($path)",0);
|
|
} else {
|
|
$path = $argv[0];
|
|
//error_log("argv($path)",0);
|
|
}
|
|
if ( ($p=strpos($path,'?')) !== false) $path = substr($path,0,$p);
|
|
if ( ($p=strrpos($path,'/')) < strlen($path)-1) $path = substr($path,0,$p);
|
|
_search_file($path,$possible);
|
|
return $possible;
|
|
}
|
|
|
|
/****************************************************************************/
|
|
// function: search_file($file,$ext)
|
|
//
|
|
// Searches for $file in document tree. The path is ignored.
|
|
//
|
|
function AddInfo($Name,$Value) {
|
|
$Value = nl2br($Value);
|
|
return "<tr><td>$Name</td><td>$Value </td></tr>\n";
|
|
}
|
|
|
|
$possible = search_file();
|
|
|
|
$title = "PHP module exif test page";
|
|
|
|
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional">
|
|
<html>
|
|
<head>
|
|
<title><?=$title ?></title>
|
|
<style type="text/css">
|
|
body {
|
|
font-size: 12pt;
|
|
}
|
|
h1 {
|
|
font-size: 20pt;
|
|
font-weight:bold;
|
|
}
|
|
h2 {
|
|
font-size: 16pt;
|
|
font-weight:bold;
|
|
}
|
|
th {
|
|
text-align: left;
|
|
}
|
|
ul {
|
|
margin-bottom: 6pt;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<h1><?=$title ?></h1>
|
|
<h2>(c) Marcus Boerger, 2002</h2>
|
|
</p>
|
|
<p>
|
|
Images taken from <a href="http://www.exif.org">www.exif.org</a>,
|
|
<a href="http://marcus-boerger.de">marcus-boerger.de</a>
|
|
all rights reserved by their authors and artists, see exif headers.
|
|
The files can be downloaded <a href="http://marcus-boerger.de/php/ext/exif/test/">here</a>.
|
|
To start the test you simple have to put all images into the same directory as this script.
|
|
The test will work with all files in that directory and all subdirectories. To test private
|
|
images just put them into that directory.
|
|
</p>
|
|
<p>
|
|
Youmay take a look at the test <a href="http://marcus-boerger.de/php/ext/exif/test.txt">source here</a>.
|
|
</p>
|
|
<p>
|
|
This test just prooves that some exif headers can be scanned.
|
|
If all files produce a header in output the module might be o.k.
|
|
</p>
|
|
<p>
|
|
What to look for in detail:
|
|
</p>
|
|
<ul>
|
|
<li>kodak-dc4800-plus-acdsee.jpg
|
|
<ul>
|
|
<li>should provide a <b>long</b> comment 'by marcus börger<%04i>'*n</li>
|
|
<li>this file returns an array but it also produces an errormessage because ACDSee destroys
|
|
the integrity of IFD directory (size of directory and offsets of entries following any
|
|
edited entry maybe wrong).
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>hp-photosmart.jpg
|
|
<ul>
|
|
<li>should provide a <b>two line</b> copyright notice</li>
|
|
</ul>
|
|
</li>
|
|
<li>olympus-d320l
|
|
<ul>
|
|
<li>should provide an <b>APP12</b> infoset</li>
|
|
</ul>
|
|
</li>
|
|
<li>unknown.jpg
|
|
<ul>
|
|
<li>should provide an <b>empty</b> comment, this is a comment section and not an IFD0, EXIF or GPS section</li>
|
|
</ul>
|
|
</li>
|
|
<li>some images
|
|
<ul>
|
|
<li>have empty fields, that is the tag is present but no data is stored</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<h2>function exif_tagname</h2>
|
|
<table border='1' cellspacing='0' cellpadding='3' summary="EXIF headernames">
|
|
<?php
|
|
if (function_exists('exif_tagname')) {
|
|
?>
|
|
<tr><td>ImageWidth</td><td><?=@exif_tagname(0x0100)?></td><td><?=error_msg()?></td></tr>
|
|
<tr><td>JPEGProc</td><td><?=@exif_tagname(0x0200)?></td><td><?=error_msg()?></td></tr>
|
|
<tr><td>SceneType</td><td><?=@exif_tagname(0xA301)?></td><td><?=error_msg()?></td></tr>
|
|
<tr><td>false</td><td><?=@exif_tagname(0x0000)===false?'false':'value'?></td><td><?=error_msg()?></td></tr>
|
|
<?php
|
|
} else {
|
|
echo "<tr><td>function exif_tagname is not supported</td></tr>\n";
|
|
}
|
|
?>
|
|
</table>
|
|
<br clear="all">
|
|
<h2>function exif_read_data for <?=count($possible)?> images</h2>
|
|
<table border='1' cellspacing='0' cellpadding='3' summary="EXIF information">
|
|
<?php
|
|
if (function_exists('read_exif_data')) {
|
|
$num = 0;
|
|
foreach($possible as $idx => $file) {
|
|
$num++;
|
|
$error = '';
|
|
$len = 4;
|
|
$size = GetImageSize($file);
|
|
$error = error_msg();// clear message
|
|
if ( $size === false) {
|
|
$getimagesize = '<b style="color:red">GetImageSize returned false</b><br>'.$error;
|
|
} else {
|
|
$getimagesize = "[ $size[0], $size[1], $size[2], $size[3] ]";
|
|
}
|
|
/**/
|
|
error_log("exif_read_data($file,'COMMENT,IFD0,EXIF,APP12', true);",0);
|
|
$image = exif_read_data($file,'COMMENT,IFD0,EXIF,APP12',true);
|
|
$error = error_msg();// clear message
|
|
//error_log("exif_read_data($file)",0);
|
|
$res = '';
|
|
if ( $image === false) {
|
|
$error = '<b style="color:red">exif_read_data returned false</b><br>'.$error;
|
|
} else {
|
|
// ah no!$error = error_msg(); // force o.k.
|
|
foreach($image as $Name => $Value) {
|
|
if ( $Name!='Thumbnail') {
|
|
if ( is_array($Value)) {
|
|
$len++;
|
|
$res .= AddInfo($Name,'Array('.count($Value).')');
|
|
foreach( $Value as $idx => $Entry) {
|
|
if ($idx=='Thumbnail') $Entry = '<data>';
|
|
$len++;
|
|
$res .= AddInfo($Name.':'.$idx,$Entry);
|
|
}
|
|
} else {
|
|
$len++;
|
|
$res .= AddInfo($Name,$Value);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
echo "<tr><td rowspan='$len' valign='top'>$num</td></tr>\n";
|
|
echo "<tr><th colspan='2'>$file</th></tr>\n";
|
|
echo "<tr><td><b>GetImageSize</b></td><td>$getimagesize</td></tr>\n";
|
|
echo "<tr><td><b>exif_read_data</b></td><td>$error</td></tr>\n";
|
|
echo $res;
|
|
}
|
|
} else {
|
|
echo "<tr><td>function exif_read_data is not supported</td></tr>\n";
|
|
}
|
|
?>
|
|
</table>
|
|
</body>
|
|
</html> |