<? // // Copyright (c) 2013 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ // // Permission to use, copy, modify, and/or distribute this software for any purpose // with or without fee is hereby granted, provided that the above copyright notice // and this permission notice appear in all copies. // // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH // REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND // FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, // OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, // DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS // ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. // if ($_MGM['path'][1]=="complete") { if ($_MGM['path'][2]=="process") { $file = (isset($_REQUEST['file']) ? $_REQUEST['file'] : ""); $filename = pathinfo($file, PATHINFO_FILENAME); $extension = strtolower(pathinfo($file, PATHINFO_EXTENSION)); echo "Processing ".basename($file)."<br />\n"; if (!file_exists($file)) { echo "Error: <span style=\"color: #ff0000;\">File does not exist.</span>"; exit(); } $allowedExtensions = array("png", "jpg", "jpeg", "gif", "tif", "tiff", "bmp"); if (!in_array($extension, $allowedExtensions)) { echo "Error: <span style=\"color: #ff0000;\">Extension is not allowed.</span>"; unlink($file); exit(); } $fileSize = filesize($file); echo "Size: ".$fileSize."<br />\n"; list($width, $height, $type, $attr) = getimagesize($file); if (!isset($width) || !isset($height)) { echo "Error: <span style=\"color: #ff0000;\">Cannot read image.</span>"; unlink($file); exit(); } echo "Width: ".$width." Height: ".$height."<br />\n"; $hash = md5_file($file); if ($hash==NULL) { echo "Error: <span style=\"color: #ff0000;\">Unable to hash image.</span>"; unlink($file); exit(); } echo "Hash: ".$hash."<br />\n"; $newFile = "./data/".$hash.".".$extension; if (file_exists($newFile)) { echo "Error: <span style=\"color: #ff0000;\">File already uploaded.</span>"; unlink($file); exit(); } $ocr = ""; if (file_exists("./ocr")) { $descriptorspec = array( 0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("pipe", "w") ); $process = proc_open("./ocr \"".$file."\"", $descriptorspec, $pipes, getcwd()); fclose($pipes[0]); while (is_resource($process)) { $read = $pipes; $write = null; $except = null; $result = stream_select($read, $write, $except, 30); if ($result==0) { fclose($pipes[1]); fclose($pipes[2]); proc_terminate($process,9); break; } else if ($result>0) { $line = fread($pipes[1], 8192); if (strlen($line)==0) { fclose($pipes[1]); fclose($pipes[2]); proc_close($process); break; } $ocr .= $line; } } echo "OCR: ".$ocr."<br />\n"; } $tags = array(); $external_data = ""; $plugins = glob("./external_data_plugins/*.php"); for ($i=0; $i<count($plugins); $i++) { require($plugins[$i]); } echo "External Data: ".$external_data."<br />\n"; $thumbFile = "./thumbs/".$hash.".".$extension; $target = 150; $newWidth = $width; $newHeight = $height; if ($width>$target || $height>$target) { $widthFactor = $target/$width; $heightFactor = $target/$height; $scaleFactor = 1; if ($widthFactor<$heightFactor) $scaleFactor = $widthFactor; else $scaleFactor = $heightFactor; $newWidth = round($width*$scaleFactor); $newHeight = round($height*$scaleFactor); } if ($type==IMAGETYPE_GIF) { $tmp = "./thumbs/coalesce".rand().".gif"; system($_MGM['imagemagick']."convert \"".$file."\" -coalesce \"".$tmp."\""); system($_MGM['imagemagick']."convert -size ".$width."x".$height." \"".$tmp."\" -resize ".$newWidth."x".$newHeight." \"".$thumbFile."\""); unlink($tmp); } else { system($_MGM['imagemagick']."convert -size ".$width."x".$height." \"".$file."\" -resize ".$newWidth."x".$newHeight." \"".$thumbFile."\""); } chmod($thumbFile, 0666); echo "Saved thumbnail.<br />\n"; rename($file, $newFile); echo "Moved Original.<br />\n"; databaseQuery("INSERT INTO images (user_id,hash,extension,name,file_size,width,height,thumb_file_size,thumb_width,thumb_height,tags,external_data,ocr,time) VALUES (%s,%s,%s,%s,%d,%d,%d,%d,%d,%d,%s,%s,%s,%d)", $_MGM['user']['docid'], $hash, $extension, $filename, $fileSize, $width, $height, filesize($thumbFile), $newWidth, $newHeight, implode(" ", $tags), $external_data, $ocr, filemtime($newFile)); echo "Complete.<br />\n"; exit(); } $files = glob("./load/*"); require_once("header.php"); ?> Processing...<br /> <div id="result"></div> <script type="text/javascript"> var files = new Array(<? $array = ""; for ($i=0; $i<count($files); $i++) { //if (in_array(pathinfo($files[$i], PATHINFO_EXTENSION), $allowedExtensions)) { if ($array!="") $array .= ","; $array .= "\"".str_replace("\"", "\\\"", $files[$i])."\""; } echo $array; ?>); var i=0; function processFiles() { if (i<files.length) { var status = document.createElement("p"); status.innerHTML = "Processing "+(i+1)+" of "+files.length+" files."; document.getElementById("result").appendChild(status); var request = new XMLHttpRequest; request.onreadystatechange = function() { if (request.readyState==4) { var status = document.createElement("p"); status.innerHTML = request.responseText; document.getElementById("result").appendChild(status); processFiles(); } } request.open("post", "<?=generateURL("upload/complete/process")?>", true); request.setRequestHeader("Cache-Control", "no-cache"); request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); request.send("file="+encodeURIComponent(files[i])); i++; } else { var completed = document.createElement("p"); completed.innerHTML = "Processing Completed."; document.getElementById("result").appendChild(completed); } } processFiles(); </script> <? require_once("footer.php"); exit(); } $file = $_SERVER['HTTP_X_FILENAME']; if (isset($file)) { $input = fopen("php://input", "r"); if (file_exists("./load/".$file)) unlink("./load/".$file); $output = fopen("./load/".$file, "w"); while ($data = fread($input, 1024)) fwrite($output, $data); fclose($output); fclose($input); echo "uploaded"; exit(); } require_once("header.php"); ?> <script type="text/javascript"> function upload() { var files = document.getElementById("files").files; document.getElementById("files").setAttribute("disabled", "true"); document.getElementById("uploadButton").setAttribute("disabled", "true"); var i=0; function setupFile() { if (i<files.length) { document.getElementById("progress").innerHTML = "Uploading "+(i+1)+" of "+files.length+" files."; var file = files[i]; if (file.name==undefined) { document.getElementById("progress").innerHTML = "Error: Browser unsupported."; return; } var request = new XMLHttpRequest; request.onreadystatechange = function() { if (request.readyState==4) setupFile(); } request.open("post", "<?=generateURL("upload")?>", true); request.setRequestHeader("Cache-Control", "no-cache"); request.setRequestHeader("X-FILENAME", file.name); request.setRequestHeader("Content-Type", "multipart/form-data"); request.send(file); i++; } else { document.getElementById("progress").innerHTML = "Upload Complete."; document.getElementById("files").removeAttribute("disabled"); document.getElementById("uploadButton").removeAttribute("disabled"); document.getElementById("files").form.reset(); window.location = "<?=generateURL("upload/complete")?>"; } } setupFile(); } </script> <form> <input type="file" multiple="true" id="files" /> <input type="button" id="uploadButton" onclick="upload()" value="Upload" class="btn" /> </form> <div id="progress"></div> <? require_once("footer.php"); exit(); ?>