Archive for January, 2007
PHP 5 Email Class
by Matt Danger on Jan.25, 2007, under PHP
Here is an example class that you can use to send email to users. It includes a properly formatted email body meta information that should avoid most spam filters.
<?php /**************************************************** * * File: class.email.php * Purpose: Email Class * Author: Matt West, http://mattdanger.net * Date: January 25, 2007 * ****************************************************/ class Email { // Public variables public $recipient; public $sender; public $reply_to; public $subject; public $body; public $cc; public $bcc; public $headers; /** * Constructor: Read in $file. * @param string $to Recipient * @param array $from "Sender's Name" => "Sender's Email" * @param string $subject Email subject * @param string $body Email body */ public function __construct ($to, $from = array(), $subject, $body) { // Set receiver $this->receiver($to); // Set sender if ( !empty($from) ) { $this->sender = array( key($from) => $from[ key($from) ] ); } else { $this->sender = array( $_SERVER['SERVER_ADMIN'] => $_SERVER['SERVER_ADMIN'] . '@' . $_SERVER['SERVER_NAME'] ); } // Set subject $this->subject($subject); // Set body $this->body($body); } /** * receiver(): Set receiver of the email * @param array $send_to List of Names & Email addresses */ public function receiver ($send_to) { foreach ($send_to as $name => $email) { if ( $this->email_is_valid($email) ) { if ( !is_numeric($name) ) { $this->recipient = ucfirst($name) . ' <' . $email . '>'; } else { $this->recipient = $email; } $this->recipient .= ', '; } else { exit( $email . " is not a valid email address." ); } } $this->recipient = preg_replace('/, $/', '', $this->recipient); } /** * sender(): Set send of the email * @param array $sender Name & Email address */ public function sender ($sender) { if ( email_is_valid($sender[0]) ) { if ( !is_numeric( key($sender) ) ) { $this->sender = ucfirst( key($sender) ) . ' <' . $email . '>'; } else { $this->sender = $sender[0]; } } else { exit( $sender[0] . " is not a valid email address." ); } } /** * reply_to(): Set send of the email * @param array $reply_to Name & Email address */ public function reply_to ($reply_to) { if ( email_is_valid($reply_to[0]) ) { if ( !is_numeric( key($reply_to) ) ) { $this->reply_to = ucfirst( key($reply_to) ) . ' <' . $email . '>'; } else { $this->reply_to = $sender[ key($reply_to) ]; } } else { exit( $reply_to[0] . " is not a valid email address." ); } } /** * cc(): Set Cc of the email * @param array $cc List of Names & Email addresses */ public function cc ($cc) { foreach ($cc as $name => $email) { if ( email_is_valid($email) ) { if ( !is_numeric($name) ) { $this->cc = ucfirst($name) . ' <' . $email . '>'; } else { $this->cc = $email; } $this->cc .= ', '; } else { exit( $email . " is not a valid email address." ); } } $this->cc = preg_replace('/, $/', '', $this->to); } /** * bcc(): Set Bcc of the email * @param array $bcc List of Names & Email addresses */ public function bcc ($bcc) { foreach ($bcc as $name => $email) { if ( !is_numeric($name) ) { $this->bcc = ucfirst($name) . ' <' . $email . '>'; } else { $this->bcc = $email; } $this->bcc .= ', '; } $this->bcc = preg_replace('/, $/', '', $this->to); } /** * set_headers(): Set email headers */ public function set_headers () { $this->set_from(); $this->headers = "MIME-Version: 1.0rn" . "From: ". $this->sender . "rn" . "To: " . $this->recipient . "rn"; if ( !empty($this->reply_to) ) $this->headers .= "Reply-To: " . $this->reply_to . "rn"; if ( !empty($this->cc) ) $this->headers .= "Cc: " . $this->cc . "rn"; if ( !empty($this->bcc) ) $this->headers .= "Bcc: " . $this->bcc . "rn"; $this->headers .= "X-Priority: 1rn" . "X-Mailer: PHP/" . phpversion() . "rn" . "Content-type: text/html; charset=iso-8859-1rn"; } /** * subject(): Sets the subject of the email. * @param string $subject The subject message. */ public function subject ($subject) { // Strip any newlines $this->subject = str_replace('n', '', $subject); } /** * body(): Sets the body message of the email. * @param string $body The body message. */ public function body ($body) { $this->body = $body; } /** * send(): Send the email * @returns boolean True if successful, false if not. */ public function send () { if (mail ( $this->recipient, $this->subject, $this->body, $this->headers)) { return true; } else { return false; } } /** * email_is_valid(): Check whether email address is valid * @param string $email Email address to check * @returns boolean True if address is valid, false if not. */ private function email_is_valid ($email) { if (eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$", $email)) { return true; } else { return false; } } } ?>
PHP Login Class
by Matt Danger on Jan.15, 2007, under PHP
Here is an example of a PHP 4.2 Login class that you can use when writing your own CMS.
<?php /**************************************************** * * File: class.login.php * Author: Matt West, 2007 * Purpose: Login class * *****************************************************/ class Login { // Public variables var $username; var $cookie; function Login() { } /** * login(): Authenticate the user's username & password * @param string $username User's username in the DB * @param string $password User's password in the DB * @param object $DB MySQL database class object * @param string $table Table to query from * @returns bool True if login successful, false if not */ function login ($username, $password, $DB, $table = 'users') { $this->username = $username; $DB->query("SELECT `username`, `salt`, `password` FROM `$table` WHERE `username` = '$username' LIMIT 1"); return ( $DB->result['password'] == sha1($DB->result['salt'] . $password) ) ? true : false ; } /** * login_admin(): Authenticate the an admin's username & password * @param string $username User's username in the DB * @param string $password User's password in the DB * @param object $DB MySQL database class object * @param string $table Table to query from * @returns bool True if login successful, false if not */ function login_admin ($username, $password, $DB, $table = 'users') { $this->username = $username; $DB->query("SELECT `username`, `salt`, `password`, `user_level` FROM `$table` WHERE `username` = '$username' LIMIT 1"); if ( ( $DB->result['password'] == sha1($DB->result['salt'] . $password) ) && ( $DB->result['user_level'] ) == '3') { return true; } else { return false; } } /** * set_cookie(): Set the user's cookie * @param string $cookie_name Name of the cookie * @param object $DB MySQL database class object * @param bool $remember Whether to set for 30 days or just this session * @param string $table Table to query from * @returns bool True if cookie was sent, false if not */ function set_cookie ($cookie_name, $DB, $remember = true, $table = 'users') { $expiration = ( $remember ) ? ( time() + (60 * 60 * 24 * 30) ) : null ; $DB->query("SELECT * FROM `$table` WHERE `username` = '" . $this->username . "' LIMIT 1"); return ( setcookie($cookie_name, base64_encode( $DB->result['username'] . ":" . $DB->result['id'] . ":" . $DB->result['user_level'] . ":" . $DB->result['first_name'] . ":" . $DB->result['last_name'] ), $expiration) ) ? true : false ; } /** * is_logged_in(): Check if user is currently logged in * @param string $cookie_name Name of the cookie * @returns bool True if cookie was sent, false if not */ function is_logged_in ($cookie_name) { $this->cookie = explode(':', base64_decode($_COOKIE[$cookie_name]) ); } /** * is_admin_logged_in(): Check if user is currently logged in * @param string $cookie_name Name of the cookie * @returns bool True if cookie was sent, false if not */ function is_admin_logged_in ($cookie_name) { if ( isset($_COOKIE[$cookie_name]) ) { $this->cookie = explode(':', base64_decode($_COOKIE[$cookie_name]) ); if ( $this->cookie[2] == 3 ) { return true; } else { return false; } } else { return false; } } /** * logout(): Clear the user's cookie * @param string $cookie_name Name of the cookie */ function logout ($cookie_name) { setcookie($cookie_name, ''); } } ?>
PHP photo resizing class example
by Matt Danger on Jan.12, 2007, under PHP
Here is an example of a PHP class that manages simple photo resizing and saving using the GD library.
<?php /**************************************************** * * Purpose: Photo Resizing Class * Author: Matt West, http://mattdanger.net * Date: January 12th, 2007 * ****************************************************/ class Photo { // Private variables private $orig_image; private $portrait_frame; // 1 = Landscape, 2 = Portrait private $image_size; private $src_width; private $src_height; private $src_image; private $dest_height; private $dest_width; private $dest_image; private $ratio; private $scale; // Public variables public $allowed_types = array('jpeg', 'jpg', 'png', 'gif'); /** * Constructor: Contruct the photo object * @param array $photo Array of photo data, usually $_FILES['photo_name'] */ public function __construct($photo) { $this->photo($photo); } /** * photo(): Create new image resource * @param string $photo Array of photo data */ public function photo($photo) { $this->orig_image = $photo; // Confirm photo is an allowed type; if ( !in_array(ereg_replace('image/', '', $this->orig_image['type']), $this->allowed_types) ) { exit("Photo type is '" . $this->orig_image['type'] . "' which is not allowed"); } // Get image X and Y values in order to determine photo framing $this->image_size = getimagesize($this->orig_image['tmp_name']); $this->src_width = $this->image_size[0]; $this->src_height = $this->image_size[1]; $this->dest_height = 0; // 1 = Landscape, 2 = Portrait $this->photo_framing = ($this->src_width > $this->src_height) ? 1 : 2 ; // Calculate the ratio at which to resize based on the dimentions $this->ratio = $this->src_width / $this->src_height; } /** * scale_to_width(): Sets the width of the resize value * @param int $width Width in pixels * @returns boolean Returns true if successful, false if it was not. */ public function scale_to_width($width) { // Set the destination width value $this->dest_width = $width; // Calculate the value at which to scale the image $this->scale = ($this->ratio) ? $this->dest_width / $this->src_width : $this->dest_height / $this->src_height; if ($this->scale_image()) { return true; } else { return false; } } /** * scale_to_height(): Sets the height of the resize value * @param int $height Height in pixels * @returns boolean Returns true if successful, false if it was not. */ public function scale_to_height($height) { // Set the destination height value $this->dest_height = $height; // Calculate the ratio at which to resize based on the dimentions $this->ratio = $this->src_width / $this->src_height; // Calculate the value at which to scale the image $this->scale = ($this->ratio) ? $this->dest_height / $this->src_height : $this->dest_width / $this->src_width ; if ($this->scale_image()) { return true; } else { return false; } } /** * scale_image(): Resize image proportionally * @returns boolean Returns true if successful, false if it was not. */ private function scale_image () { if ($this->scale > 1) { exit ("The scale width supplied is larger than the original image. Please try a smaller number."); } $this->dest_width = $this->src_width * $this->scale; $this->dest_height = $this->src_height * $this->scale; if ( $this->dest_width >= $this->src_width && $this->dest_width >= $this->src_width ) $this->scale = 1; $this->src_image = imagecreatefromjpeg ($this->orig_image['tmp_name']); $this->dest_image = imagecreatetruecolor ($this->src_width * $this->scale, $this->src_height * $this->scale); if ( imagecopyresampled( $this->dest_image, $this->src_image, 0, 0, 0, 0, $this->dest_width, $this->dest_height, $this->src_width, $this->src_height) ) { return true; } else { return false; } } /** * save_photo(): Saves the resized photo * @param string $filename The path and filename to save the file (ex: "/path/to/image.jpg") * @param int $compression A number from 1-100 representing the level of compression. 100 is the least compression. * @returns boolean Returns true if save was successful, false if it was not. */ public function save_photo ($filename, $compression = 80) { if ( imagejpeg($this->dest_image, $filename, $compression) ) { $return_value = true; } else { $return_value = false; } imagedestroy($this->src_image); imagedestroy($this->dest_image); return $return_value; } } ?>