Example #1
0
 /**
  * Write image file to disk - GD
  *
  * Takes an image resource as input and writes the file
  * to the specified destination
  *
  * @access	public
  * @param	resource
  * @return	bool
  */
 function image_save_gd($resource)
 {
     //SAE
     $x = explode('/', $this->full_dst_path);
     $file_name = end($x);
     switch ($this->image_type) {
         case 1:
             if (!function_exists('imagegif')) {
                 $this->set_error(array('imglib_unsupported_imagecreate', 'imglib_gif_not_supported'));
                 return FALSE;
             }
             //SAE
             if (!@imagegif($resource, SAE_TMP_PATH . $file_name)) {
                 $this->set_error('imglib_save_failed');
                 return FALSE;
             }
             break;
         case 2:
             if (!function_exists('imagejpeg')) {
                 $this->set_error(array('imglib_unsupported_imagecreate', 'imglib_jpg_not_supported'));
                 return FALSE;
             }
             //SAE
             if (!@imagejpeg($resource, SAE_TMP_PATH . $file_name, $this->quality)) {
                 $this->set_error('imglib_save_failed');
                 return FALSE;
             }
             break;
         case 3:
             if (!function_exists('imagepng')) {
                 $this->set_error(array('imglib_unsupported_imagecreate', 'imglib_png_not_supported'));
                 return FALSE;
             }
             //SAE
             if (!@imagepng($resource, SAE_TMP_PATH . $file_name)) {
                 $this->set_error('imglib_save_failed');
                 return FALSE;
             }
             break;
         default:
             $this->set_error(array('imglib_unsupported_imagecreate'));
             return FALSE;
             break;
     }
     //写入SAE的Storage
     s_write($this->full_dst_path, file_get_contents(SAE_TMP_PATH . $file_name));
     return TRUE;
 }
Example #2
0
 public function append_post($filename, $text, $image)
 {
     if (empty($text) and empty($image)) {
         return false;
     }
     if (substr($filename, -3) != '.md') {
         $filename .= '.md';
     }
     if (IS_SAE) {
         $path = 'posts/' . $filename;
     } else {
         $path = $this->posts_path . $filename;
     }
     if (!s_file_exists($path)) {
         $this->_error = $filename . ' is not exist';
         return false;
     }
     $content = s_read($path);
     if ($text) {
         $content .= "\n\n" . $text;
         if (s_write($path, $content) === false) {
             $this->_error = 'failed to write';
             return false;
         }
     }
     if ($image) {
         $ret = $this->image_upload($image);
         if ($ret === false) {
             return false;
         } else {
             $image_filename = basename($ret);
             $content .= "\n\n" . "![](images/{$image_filename})";
             if (s_write($path, $content) === false) {
                 $this->_error = 'failed to write';
                 return false;
             } else {
                 return $filename;
             }
         }
     }
     return $filename;
 }
Example #3
0
 /**
  * Perform the file upload
  *
  * @return	bool
  */
 public function do_upload($field = 'userfile')
 {
     // Is $_FILES[$field] set? If not, no reason to continue.
     if (!isset($_FILES[$field])) {
         $this->set_error('upload_no_file_selected');
         return FALSE;
     }
     // Is the upload path valid?
     if (!$this->validate_upload_path()) {
         // errors will already be set by validate_upload_path() so just return FALSE
         return FALSE;
     }
     // Was the file able to be uploaded? If not, determine the reason why.
     if (!is_uploaded_file($_FILES[$field]['tmp_name'])) {
         $error = !isset($_FILES[$field]['error']) ? 4 : $_FILES[$field]['error'];
         switch ($error) {
             case 1:
                 // UPLOAD_ERR_INI_SIZE
                 $this->set_error('upload_file_exceeds_limit');
                 break;
             case 2:
                 // UPLOAD_ERR_FORM_SIZE
                 $this->set_error('upload_file_exceeds_form_limit');
                 break;
             case 3:
                 // UPLOAD_ERR_PARTIAL
                 $this->set_error('upload_file_partial');
                 break;
             case 4:
                 // UPLOAD_ERR_NO_FILE
                 $this->set_error('upload_no_file_selected');
                 break;
             case 6:
                 // UPLOAD_ERR_NO_TMP_DIR
                 $this->set_error('upload_no_temp_directory');
                 break;
             case 7:
                 // UPLOAD_ERR_CANT_WRITE
                 $this->set_error('upload_unable_to_write_file');
                 break;
             case 8:
                 // UPLOAD_ERR_EXTENSION
                 $this->set_error('upload_stopped_by_extension');
                 break;
             default:
                 $this->set_error('upload_no_file_selected');
                 break;
         }
         return FALSE;
     }
     // Set the uploaded data as class variables
     $this->file_temp = $_FILES[$field]['tmp_name'];
     $this->file_size = $_FILES[$field]['size'];
     $this->_file_mime_type($_FILES[$field]);
     $this->file_type = preg_replace("/^(.+?);.*\$/", "\\1", $this->file_type);
     $this->file_type = strtolower(trim(stripslashes($this->file_type), '"'));
     $this->file_name = $this->_prep_filename($_FILES[$field]['name']);
     $this->file_ext = $this->get_extension($this->file_name);
     $this->client_name = $this->file_name;
     // Is the file type allowed to be uploaded?
     if (!$this->is_allowed_filetype()) {
         $this->set_error('upload_invalid_filetype');
         return FALSE;
     }
     // if we're overriding, let's now make sure the new name and type is allowed
     if ($this->_file_name_override != '') {
         $this->file_name = $this->_prep_filename($this->_file_name_override);
         // If no extension was provided in the file_name config item, use the uploaded one
         if (strpos($this->_file_name_override, '.') === FALSE) {
             $this->file_name .= $this->file_ext;
         } else {
             $this->file_ext = $this->get_extension($this->_file_name_override);
         }
         if (!$this->is_allowed_filetype(TRUE)) {
             $this->set_error('upload_invalid_filetype');
             return FALSE;
         }
     }
     // Convert the file size to kilobytes
     if ($this->file_size > 0) {
         $this->file_size = round($this->file_size / 1024, 2);
     }
     // Is the file size within the allowed maximum?
     if (!$this->is_allowed_filesize()) {
         $this->set_error('upload_invalid_filesize');
         return FALSE;
     }
     // Are the image dimensions within the allowed size?
     // Note: This can fail if the server has an open_basdir restriction.
     if (!$this->is_allowed_dimensions()) {
         $this->set_error('upload_invalid_dimensions');
         return FALSE;
     }
     // Sanitize the file name for security
     $this->file_name = $this->clean_file_name($this->file_name);
     // Truncate the file name if it's too long
     if ($this->max_filename > 0) {
         $this->file_name = $this->limit_filename_length($this->file_name, $this->max_filename);
     }
     // Remove white spaces in the name
     if ($this->remove_spaces == TRUE) {
         $this->file_name = preg_replace("/\\s+/", "_", $this->file_name);
     }
     /*
      * Validate the file name
      * This function appends an number onto the end of
      * the file if one with the same name already exists.
      * If it returns false there was a problem.
      */
     $this->orig_name = $this->file_name;
     if ($this->overwrite == FALSE) {
         $this->file_name = $this->set_filename($this->upload_path, $this->file_name);
         if ($this->file_name === FALSE) {
             return FALSE;
         }
     }
     /*
      * Run the file through the XSS hacking filter
      * This helps prevent malicious code from being
      * embedded within a file.  Scripts can easily
      * be disguised as images or other file types.
      */
     if ($this->xss_clean) {
         if ($this->do_xss_clean() === FALSE) {
             $this->set_error('upload_unable_to_write_file');
             return FALSE;
         }
     }
     /* 
      * Move the file to the final destination
      * To deal with different server configurations
      * we'll attempt to use copy() first.  If that fails
      * we'll use move_uploaded_file().  One of the two should
      * reliably work in most environments
      */
     /*--SAE--
     		if ( ! @copy($this->file_temp, $this->upload_path.$this->file_name))
     		{
     			if ( ! @move_uploaded_file($this->file_temp, $this->upload_path.$this->file_name))
     			{
     				$this->set_error('upload_destination_error');
     				return FALSE;
     			}
     		}
     		*/
     //SAE 写入Storage, 返回文件url地址
     $save_file = s_write($this->upload_path . $this->file_name, file_get_contents($this->file_temp));
     if ($save_file === FALSE) {
         return FALSE;
     }
     $this->sae_storage_fileurl = $save_file;
     /*
      * Set the finalized image dimensions
      * This sets the image width/height (assuming the
      * file was an image).  We use this information
      * in the "data" function.
      */
     $this->set_image_properties($save_file);
     return TRUE;
 }