137 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			137 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Model of an Attachment
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class MimeMailParser_attachment {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * @var $filename Filename
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public  $filename;
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * @var $content_type Mime Type
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public  $content_type;
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * @var $content File Content
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									private  $content;
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * @var $extension Filename extension
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									private $extension;
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * @var $content_disposition Content-Disposition (attachment or inline)
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public $content_disposition;
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * @var $headers An Array of the attachment headers
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public $headers;
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									private  $stream;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function __construct($filename, $content_type, $stream, $content_disposition = 'attachment', $headers = array()) {
							 | 
						||
| 
								 | 
							
										$this->filename = $filename;
							 | 
						||
| 
								 | 
							
										$this->content_type = $content_type;
							 | 
						||
| 
								 | 
							
										$this->stream = $stream;
							 | 
						||
| 
								 | 
							
										$this->content = null;
							 | 
						||
| 
								 | 
							
										$this->content_disposition = $content_disposition;
							 | 
						||
| 
								 | 
							
										$this->headers = $headers;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * retrieve the attachment filename
							 | 
						||
| 
								 | 
							
									 * @return String
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getFilename() {
							 | 
						||
| 
								 | 
							
										return $this->filename;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Retrieve the Attachment Content-Type
							 | 
						||
| 
								 | 
							
									 * @return String
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getContentType() {
							 | 
						||
| 
								 | 
							
										return $this->content_type;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Retrieve the Attachment Content-Disposition
							 | 
						||
| 
								 | 
							
									 * @return String
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getContentDisposition() {
							 | 
						||
| 
								 | 
							
										return $this->content_disposition;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Retrieve the Attachment Headers
							 | 
						||
| 
								 | 
							
									 * @return String
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getHeaders() {
							 | 
						||
| 
								 | 
							
										return $this->headers;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Retrieve the file extension
							 | 
						||
| 
								 | 
							
									 * @return String
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getFileExtension() {
							 | 
						||
| 
								 | 
							
										if (!$this->extension) {
							 | 
						||
| 
								 | 
							
											$ext = substr(strrchr($this->filename, '.'), 1);
							 | 
						||
| 
								 | 
							
											if ($ext == 'gz') {
							 | 
						||
| 
								 | 
							
												// special case, tar.gz
							 | 
						||
| 
								 | 
							
												// todo: other special cases?
							 | 
						||
| 
								 | 
							
												$ext = preg_match("/\.tar\.gz$/i", $ext) ? 'tar.gz' : 'gz';
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											$this->extension = $ext;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										return $this->extension;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Read the contents a few bytes at a time until completed
							 | 
						||
| 
								 | 
							
									 * Once read to completion, it always returns false
							 | 
						||
| 
								 | 
							
									 * @return String
							 | 
						||
| 
								 | 
							
									 * @param $bytes Int[optional]
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function read($bytes = 2082) {
							 | 
						||
| 
								 | 
							
										return feof($this->stream) ? false : fread($this->stream, $bytes);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Retrieve the file content in one go
							 | 
						||
| 
								 | 
							
									 * Once you retreive the content you cannot use MimeMailParser_attachment::read()
							 | 
						||
| 
								 | 
							
									 * @return String
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function getContent() {
							 | 
						||
| 
								 | 
							
										if ($this->content === null) {
							 | 
						||
| 
								 | 
							
											fseek($this->stream, 0);
							 | 
						||
| 
								 | 
							
											while(($buf = $this->read()) !== false) { 
							 | 
						||
| 
								 | 
							
												$this->content .= $buf; 
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										return $this->content;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Allow the properties 
							 | 
						||
| 
								 | 
							
									 * 	MimeMailParser_attachment::$name,
							 | 
						||
| 
								 | 
							
									 * 	MimeMailParser_attachment::$extension 
							 | 
						||
| 
								 | 
							
									 * to be retrieved as public properties
							 | 
						||
| 
								 | 
							
									 * @param $name Object
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function __get($name) {
							 | 
						||
| 
								 | 
							
										if ($name == 'content') {
							 | 
						||
| 
								 | 
							
											return $this->getContent();
							 | 
						||
| 
								 | 
							
										} else if ($name == 'extension') {
							 | 
						||
| 
								 | 
							
											return $this->getFileExtension();
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										return null;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								?>
							 |