Advertisement
Guest User

Untitled

a guest
Feb 11th, 2011
856
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.23 KB | None | 0 0
  1. <?php
  2.   ini_set('always_populate_raw_post_data', 'On');
  3.  
  4.   define('UPLOAD_DIR', '/var/www/blog/htdocs/uploaded/');
  5.   define('UPLOAD_LOCATION', '/uploaded/');
  6.  
  7.   if($_SERVER['REQUEST_METHOD'] != 'POST')
  8.     die_msg('Invalid request.');
  9.  
  10.   $fname = tempnam(sys_get_temp_dir(), "img_upload");
  11.   if(save_to_file($fname) === false)
  12.     die_msg('Failed to save file.');
  13.  
  14.   $mime = mime_content_type($fname);
  15.   if(!preg_match('#^image/(.+)#', $mime, $ext)){
  16.     unlink($fname);
  17.     die_msg('Unable to determine file type.');
  18.   }
  19.  
  20.   $ext = '.'.$ext[1];
  21.   while(file_exists($path = UPLOAD_DIR . ($name = uniqid(). $ext)));
  22.  
  23.   if(!rename($fname, $path)){
  24.     unlink($fname);
  25.     die_msg('Unable to rename file.');
  26.   }
  27.  
  28.   header('Image-Link: ' . build_url_for(UPLOAD_LOCATION, $name));
  29.  
  30.   function die_msg($msg){
  31.     header('Error-Message: ' . $msg, true, 500);
  32.     exit;
  33.   }
  34.  
  35.   function save_to_file($name, $size_hint = 16384){
  36.     if(!($src = fopen('php://input', 'rb')))
  37.       return false;
  38.  
  39.     if(!($dst = fopen($name, 'wb'))){
  40.       fclose($src);
  41.       return false;
  42.     }
  43.  
  44.     $wrote = 0;
  45.  
  46.     while(!feof($src)){
  47.       if(($buf = fread($src, $size_hint)) === false || ($t = fwrite($dst, $buf)) === false){
  48.         $wrote = false;
  49.         break;
  50.       }
  51.  
  52.       $wrote += $t;
  53.     }
  54.  
  55.     fclose($src);
  56.     fclose($dst);
  57.  
  58.     if($wrote === false)
  59.       unlink($name);
  60.  
  61.     return $wrote;
  62.   }
  63.  
  64.   function build_url_for($name){
  65.     $args = func_get_args();
  66.  
  67.     $args = preg_replace('#/{2,}#', '/', implode('/', $args));
  68.     if(substr($args, 0, 1) != '/')
  69.       $args = '/' . $args;
  70.  
  71.     $is_https = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off';
  72.  
  73.     $url = 'http';
  74.  
  75.     if($is_https)
  76.       $url .= 's';
  77.  
  78.     $url .= '://';
  79.    
  80.     if(isset($_SERVER['PHP_AUTH_USER']) || isset($_SERVER['PHP_AUTH_PW'])){
  81.       $url .= (isset($_SERVER['PHP_AUTH_USER']) ? $_SERVER['PHP_AUTH_USER'] : '') .
  82.               ':' . (isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : '');
  83.     }
  84.  
  85.     $url .= $_SERVER['HTTP_HOST'];
  86.  
  87.     if(($is_https && $_SERVER['SERVER_PORT'] != 443) || (!$is_https && $_SERVER['SERVER_PORT'] != 80))
  88.       $url .= ':' . $_SERVER['SERVER_PORT'];
  89.  
  90.     return $url . $args;
  91.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement