| 
<?phpheader('HTTP/1.1 201 Created');
 header('Location: http://'.gethostname().'.local/eSCL/Scans/');
 header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' );
 header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
 header( 'Cache-Control: no-store, no-cache, must-revalidate' );
 header( 'Cache-Control: post-check=0, pre-check=0', false );
 header( 'Pragma: no-cache' );
 $unique= uniqid();
 include_once '../../config.inc.php';
 mkdir($root.'/eSCL/Scans/', 0755);
 
 //$scandebug='yes';
 //header('Location: http://'.gethostname().'./eSCL/Scans', false);
 //error_reporting( -1 );
 //ini_set( 'display_errors', 1 );
 // In this file we mostly parse the POSTed XML from an eSCL scan client in preparation
 // to pass to included esclscan.php to do the actual scanning
 // which is for initiating the command line scan.
 function get_string_between($string, $start, $end)
 {
 $string = ' ' . $string;
 $ini = strpos($string, $start);
 if ($ini == 0) return '';
 $ini += strlen($start);
 $len = strpos($string, $end, $ini) - $ini;
 return substr($string, $ini, $len);
 }
 
 // save this for later
 /*function uuid()
 {
 return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
 mt_rand(0, 0xffff), mt_rand(0, 0xffff),
 mt_rand(0, 0xffff),
 mt_rand(0, 0x0fff) | 0x4000,
 mt_rand(0, 0x3fff) | 0x8000,
 mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
 );
 }
 
 echo  uuid();
 $jobuuid = uuid();
 */
 
 $job= file_get_contents('php://input');
 //You can replace the above $job=... line with one of the variable strings below then use a web browser at
 //http://ipaddress/eSCL/ScanJob to initiate a scan with one of the pre - defined profiles below.
 
 //Scan Job no resolution defined
 
 /*
 $job='<?xml version="1.0" encoding="UTF-8"?>
 <scan:ScanSettings xmlns:pwg="http://www.pwg.org/schemas/2010/12/sm" xmlns:scan="http://schemas.hp.com/imaging/escl/2011/05/03">
 <pwg:Version>2.0</pwg:Version>
 <pwg:ScanRegions>
 <pwg:ScanRegion>
 <pwg:Height>3300</pwg:Height>
 <pwg:ContentRegionUnits>escl:ThreeHundredthsOfInches</pwg:ContentRegionUnits>
 <pwg:Width>2550</pwg:Width>
 <pwg:XOffset>0</pwg:XOffset>
 <pwg:YOffset>0</pwg:YOffset>
 </pwg:ScanRegion>
 </pwg:ScanRegions>
 <pwg:InputSource>Platen</pwg:InputSource>
 <scan:ColorMode>RGB24</scan:ColorMode>
 </scan:ScanSettings>';
 
 typical scan job
 $job='<?xml version="1.0" encoding="UTF-8"?>
 <scan:ScanSettings xmlns:scan="http://schemas.hp.com/imaging/escl/2011/05/03" xmlns:pwg="http://www.pwg.org/schemas/2010/12/sm">
 <pwg:Version>2.6</pwg:Version>
 <pwg:ScanRegions>
 <pwg:ScanRegion>
 <pwg:Height>3300</pwg:Height>
 <pwg:ContentRegionUnits>escl:ThreeHundredthsOfInches</pwg:ContentRegionUnits>
 <pwg:Width>2550</pwg:Width>
 <pwg:XOffset>0</pwg:XOffset>
 <pwg:YOffset>0</pwg:YOffset>
 </pwg:ScanRegion>
 </pwg:ScanRegions>
 <scan:DocumentFormatExt>application/pdf</scan:DocumentFormatExt>
 <pwg:ContentType>TextAndPhoto</pwg:ContentType>
 <scan:XResolution>300</scan:XResolution>
 <scan:YResolution>300</scan:YResolution>
 <scan:ColorMode>Grayscale8</scan:ColorMode>
 </scan:ScanSettings>
 ';
 */
 
 if ($scandebug == 'yes')
 { // this will save the xml request from client if enabled in config.inc.php
 file_put_contents($root.'eSCL/Scans/scancmd.xml', $job);
 }
 else
 {
 }
 $scanjob=$job;
 $string=$job;   // NEED THIS??
 
 //<scan:Intent>Preview</scan:Intent>
 $beginafter='<scan:Intent>'; //application/pdf or image/jpeg  some scanners may support other formats like TIFF or PNG
 $endbefore='</scan:Intent>';
 $scanintent= trim(get_string_between($scanjob, $beginafter, $endbefore));
 $beginafter='<scan:DocumentFormatExt>'; //application/pdf or image/jpeg  some scanners may support other formats like TIFF or PNG
 $endbefore='</scan:DocumentFormatExt>';
 $formatext= trim(get_string_between($scanjob, $beginafter, $endbefore));
 $beginafter='<pwg:DocumentFormat>'; //application/pdf or image/jpeg  some scanners may support other formats like TIFF or PNG
 $endbefore='</pwg:DocumentFormat>';// seems to be 2 variations on this!
 $formatx= trim(get_string_between($scanjob, $beginafter, $endbefore));
 $beginafter='<scan:ColorMode>';
 $endbefore='</scan:ColorMode>';
 $colormode= trim(get_string_between($scanjob, $beginafter, $endbefore));
 $beginafter='<scan:XResolution>';
 $endbefore='</scan:XResolution>';
 $xresolution= trim(get_string_between($scanjob, $beginafter, $endbefore));// below is not used for s400w but may be useful for other scanners
 $beginafter='<scan:YResolution>';
 $endbefore='</scan:YResolution>';
 $yresolution= trim(get_string_between($scanjob, $beginafter, $endbefore));
 $beginafter='<pwg:Height>';// seems to be 2 variations on this!
 $endbefore='</pwg:Height>';
 $height= trim(get_string_between($scanjob, $beginafter, $endbefore));
 $beginafter='<pwg:Width>';// seems to be 2 variations on this!
 $endbefore='</pwg:Width>';
 $width= trim(get_string_between($scanjob, $beginafter, $endbefore));
 $beginafter='<scan:MinWidth>';
 $endbefore='</scan:MinWidth>';
 $scanminwidth= trim(get_string_between($scanjob, $beginafter, $endbefore));
 $beginafter='<scan:MinHeight>';
 $endbefore='</scan:MinHeight>';
 $scanminheight= trim(get_string_between($scanjob, $beginafter, $endbefore));
 $beginafter='<scan:MaxWidth>';// seems to be 2 variations on this!
 $endbefore='</scan:MaxWidth>';
 $scanmaxwidth= trim(get_string_between($scanjob, $beginafter, $endbefore));
 $beginafter='<scan:MaxHeight>';// seems to be 2 variations on this!
 $endbefore='</scan:MaxHeight>';
 $scanmaxheight= trim(get_string_between($scanjob, $beginafter, $endbefore));
 $beginafter='<pwg:ContentRegionUnits>';
 $endbefore='</pwg:ContentRegionUnits>';
 $contentregionunits= trim(get_string_between($scanjob, $beginafter, $endbefore));
 $beginafter='<pwg:XOffset>';
 $endbefore='</pwg:XOffset>';
 $xoffset= trim(get_string_between($scanjob, $beginafter, $endbefore));
 $beginafter='<pwg:YOffset>';
 $endbefore='</pwg:YOffset>';
 $yoffset= trim(get_string_between($scanjob, $beginafter, $endbefore));
 
 
 // because DocumentFormat can come in either, and aparently sometimes undefined now too!..
 if ((($formatext=='') || ($formatext==NULL) || (!isset($formatext))) && (($formatx=='') || ($formatx==NULL) || (!isset($formatx))))
 {
 $format='image/jpeg';  //default is 'image/jpeg' if undefined
 }
 elseif (($formatext=='') || ($formatext==NULL) || (!isset($formatext)))
 {
 $format=$formatx;
 }
 elseif (($formatx=='') || ($formatx==NULL) || (!isset($formatx)))
 {
 $format=$formatext;
 }
 $beginafter='<pwg:ContentType>';//Text,TextAndPhoto, Photo (mopira seems to offer all of these regardless of capabilities
 $endbefore='</pwg:ContentType>';
 $content= trim(get_string_between($scanjob, $beginafter, $endbefore));// above is not used for s400w but may be useful for other scanners
 $jobid=$unique;
 include_once('../../esclscan.php');
 // Need Job counter and system UUID? As well as Job UUID.
 
 $expiration=file_get_contents($root.'eSCL/lastscan.txt'); //if we just did a scan this has an valid expiration to keep it from showing "No Page" when we should see "processing"
 
 
 
 
 //$key = false;
 /*
 while($key){ // this keeps the page busy till Scanner Status shows ready
 sleep(1);
 $nowagain=time();
 if($expiration >= $nowagain) $key = true;
 }
 */
 ?>
 
 |