PHP Snippets
1 2 3 »sendmail
Information
(PHP Version >= 3)Functions used in this snippet: trim, preg_math, rand, strip_tags, preg_replace, chunk_split, base64_encode, is_array, file_exists, pathinfo, file_get_contents, mail, implode.
Description
boolean sendmail( string to, string subject, string body, mixed file, string from, string additional )
Simply put, this function sends mail. It checks to see if the body is in html format, if so it will send it with the correct headers to be received as html. It also sends a plain text alternative for older browsers.
If the optional file is supplied, the function will send this file (or files if file is of type array) as an attachment.
You can also specify who the email should be from as well as the reply-to address.
If you need additional settings, you can pass them as mail headers in the additional parameter.
Snippet
<?php
function sendmail($to, $subject, $body, $file=NULL, $from='noreply@yourdomain.com', $additional='')
{
$boundary = 'SPROUT-19_16_18_15_21_20';
$headers = array();
$headers[] = 'From: ' . $from;
$headers[] = 'Reply-To: ' . $from;
if(trim($additional) !== '')
{
$headers[] = $additional;
}
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-Type: multipart/mixed; boundary="' . $boundary . '"';
$headers[] = 'Content-Transfer-Encoding: 7bit' . "\r\n";
$headers[] = "> This is a multi-part message in MIME format.\r\n";
$headers[] = '--' . $boundary;
// if there is html in the message, send it with the right settings and an alternative for crappy browsers
if(preg_match('/\<(html|body)/ims', $body))
{
$htmlbound = 'SPROUT-' . rand(100,9999);
$headers[] = 'Content-Type: multipart/alternative; boundary="' . $htmlbound . '"' . "\r\n";
$headers[] = '--' . $htmlbound;
$headers[] = 'Content-Type: text/plain; charset="iso-8859-1"';
$headers[] = 'Content-Transfer-Encoding: 7bit' . "\r\n";
$headers[] = strip_tags(preg_replace('/\<head\>(.+?)\<\/head\>/ims', '', $body)) . "\r\n\r\n";
$headers[] = '--' . $htmlbound;
$headers[] = 'Content-Type: text/html; charset="iso-8859-1"';
$headers[] = 'Content-Transfer-Encoding: base64' . "\r\n";
$headers[] = chunk_split(base64_encode($body));
$headers[] = "\r\n\r\n--" . $htmlbound . "--\r\n\r\n--" . $boundary;
}
else
{
$headers[] = 'Content-Type: text/plain; charset="iso-8859-1"';
$headers[] = 'Content-Transfer-Encoding: 7bit' . "\r\n";
$headers[] = $body . "\r\n\r\n";
$headers[] = '--' . $boundary;
}
// attach files if they are there
if($file !== NULL)
{
$files = (!is_array($file)) ? array($file) : $file;
foreach($files as $attachment)
{
if(!file_exists($attachment))
continue;
$path = pathinfo($attachment);
$headers[] = 'Content-Type: application/octet-stream; name="' . $path['basename'] . '"';
$headers[] = 'Content-Disposition: attachment; filename="' . $path['basename'] . '"';
$headers[] = "Content-Transfer-Encoding: base64\r\n";
$attach = chunk_split(base64_encode(file_get_contents($attachment)));
$headers[] = $attach;
$headers[] = '--' . $boundary;
}
}
return mail($to, $subject, '', implode("\r\n", $headers) . '--');
}
?>
Example
sendmail Can be used in the following way:
<?php
// Send an html file
sendmail('someone@domain.ext', 'Title', 'HTML CONTENT HERE');
// Send an email with an attachment
sendmail('someone@domain.ext', 'Title', 'Check out this picture', 'image.jpg');
// Send an html style email with multiple attachments
sendmail('someone@domain.ext', 'Title', 'HTML GOES HERE', array('product.jpg', 'productdetails.pdf'));
// Send a plaintext email from joeschmoe@domain.ext
sendmail('someone@domain.ext', 'Title', 'PLAIN TEXT GOES HERE', NULL, 'joeschmoe@domain.ext');
?>
excerpt
Information
(PHP Version >= 3)Functions used in this snippet: preg_match_all, preg_replace, substr, strrpos, strpos.
Description
str excerpt( str excerpt, int length )
Returns an excerpt of the string excerpt with a maximum length of length. This function is useful if you have HTML in the excerpt because it will keep the HTML structure intact. It does this by keeping the HTML tags in the excerpt, and appending the empty HTML tags at the end of the excerpt.
Snippet
<?php
function excerpt($excerpt, $length)
{
preg_match_all('/<[^>]+>/', $excerpt, $matches);
$excerpt = preg_replace('/<[^>]+>/', '|!|', $excerpt);
$excerpt = substr($excerpt, 0, strrpos(substr($excerpt, 0, $length), ' '));
$exhausted = false;
foreach($matches[0] as $match)
{
if(strpos($excerpt, '|!|') !== false)
{
$excerpt = preg_replace('/\|\!\|/', $match, $excerpt, 1);
}
else
{
if(!$exhausted)
{
$excerpt .= '...';
$exhausted = true;
}
$excerpt .= $match;
}
}
return $excerpt;
}
?>
Example
excerpt Can be used in the following way:
<?php
$str = '<p>Hello <a href="http://www.bigtoach.com">Test</a> This is just a test to see if <strong>Nested</strong> <em>Tags</em> <em>Will work</em></p>';
echo excerpt($str, 80);
// Produces The Following
// <p>Hello <a href="http://www.bigtoach.com">Test</a> This is just a test to see if <strong>Nested</strong> <em>Tags</em>...<em></em></p>
?>
find_functions
Information
(PHP Version >= 4)Functions used in this snippet: preg_replace, preg_match_all, in_array, implode.
Description
str find_functions( str str )
Finds every function in the string str. It returns a string of the functions seperated by commas with no spaces.
Snippet
<?php
function find_functions($str)
{
$str = preg_replace('/function ([a-z0-9_]+)\s?\(/ims','',$str);
preg_match_all('/([a-z0-9_]+)\s?\(/ims',$str,$matches);
$reserved = array('if', 'foreach', 'for', 'do', 'while', 'array', 'print', 'switch', 'echo');
$ret = array();
foreach($matches[1] as $key=>$function)
{
if(!in_array($function, $reserved))
{
$ret[] = $function;
$reserved[] = $function;
}
}
return implode(',',$ret);
}
?>
Example
find_functions Can be used in the following way:
<?php
$str = '$var = str_replace("haha", "wee", "haha wee");
print_r($_SERVER);
echo substr ($_SERVER["REMOTE_ADDR"], 0, strpos($_SERVER["REMOTE_ADDR"], ".") -1);
echo pi();';
echo find_functions($str);
// returns the following
// str_replace,print_r,substr,strpos,pi
?>
random_pass
Information
(PHP Version >= 3.0.6)Functions used in this snippet: strlen, mt_rand.
Description
str random_pass( [int length, [str chars]] )
Creates a random password length characters long with the specific characters of chars.
Snippet
<?php
function random_pass($length=7,$chars=NULL){
if($chars === NULL){
$chars = '0123456789';
$chars .= 'abcdefghijklmnopqrstuvwxyz';
$chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
}
$charlen = strlen($chars) - 1;
$ret = '';
for($i=0; $i<$length; $i++){
$ret .= $chars{mt_rand(0,$charlen)};
}
return $ret;
}
?>
Example
random_pass Can be used in the following way:
<?php
echo random_pass(); // 7 character random pass
echo random_pass(10); // 10 character random pass
echo random_pass(6,'abcdefghijklmnopqrstuvwxyz');
// 6 character random pass with only lowercase a-z characters
?>
time_since
Information
(PHP Version >= 3)Functions used in this snippet: time, date, ceil, floor.
Description
str time_since( int time[, int now[, str fmt]] )
Returns the textual difference between times. If the optional now is left as NULL, the current time will be used, otherwise the time given will be used. If the optional fmt is set, the time that is returned will be formatted according to this string (assuming it is older than 2 days old, Reference www.php.net/date for how to format this).
Snippet
<?php
function time_since($time, $now=NULL, $fmt='l F jS, g:i a'){
if($now === NULL){
$now = time();
}
$diff = $now - $time;
$today = date('dmy', $now) === date('dmy', $time) ? true : false;
if($today && $diff < 60 * 60){
$num = ceil($diff / 60);
return $num . ' minute' . ($num > 1 ? 's' : '') . ' ago';
}elseif($today){
$num = floor($diff / 60 / 60);
return $num . ' hour' . ($num > 1 ? 's' : '') . ' ago';
}else{
$thisyear = date('y', $now) === date('y', $time) ? true : false;
$daydiff = date('z', $now) - date('z', $time);
if($daydiff === 1 && $thisyear){
return 'Yesterday';
}
}
return date($fmt, $time);
}
?>
Example
time_since Can be used in the following way:
<?php
echo time_since(time());
// returns something like 20 minutes ago
echo time_since('1121913694', '1121920868');
// returns 1 hour ago
echo time_since(strtotime('yesterday'));
// returns Yesterday
echo time_since(strtotime('-2 months'),NULL, 'm/d/y');
// returns something like 18/05/05
?>
1 2 3 »