10 super useful PHP snippets you probably haven’t seen

by Jean. 19 Comments -

When working with PHP, it is very useful to have a “toolbox” of handy functions and code snippets that can save lots of time when needed. Today, I’m going to show you 10 super useful code snippets that you probably never heard of.

Text messaging with PHP using the TextMagic API

If for some reason, you need to send text messages to your clients cell phones, you should definitely have a look to TextMagic. They provide an easy API which allow you to send SMS to cell phones. Please note that the TextMagic service isn’t free.

The example below shows how easy it is to send a SMS to a cell phone using the TextMagic API:

// Include the TextMagic PHP lib
require('textmagic-sms-api-php/TextMagicAPI.php');

// Set the username and password information
$username = 'myusername';
$password = 'mypassword';

// Create a new instance of TM
$router = new TextMagicAPI(array(
	'username' => $username,
	'password' => $password
));

// Send a text message to '999-123-4567'
$result = $router->send('Wake up!', array(9991234567), true);

// result:  Result is: Array ( [messages] => Array ( [19896128] => 9991234567 ) [sent_text] => Wake up! [parts_count] => 1 )

Source: http://davidwalsh.name/php-text-messaging

Detect location by IP

Here is an useful code snippet to detect the location of a specific IP. The function below takes one IP as a parameter, and returns the location of the IP. If no location is found, UNKNOWN is returned.

function detect_city($ip) {
        
        $default = 'UNKNOWN';

        if (!is_string($ip) || strlen($ip) < 1 || $ip == '127.0.0.1' || $ip == 'localhost')
            $ip = '8.8.8.8';

        $curlopt_useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)';
        
        $url = 'http://ipinfodb.com/ip_locator.php?ip=' . urlencode($ip);
        $ch = curl_init();
        
        $curl_opt = array(
            CURLOPT_FOLLOWLOCATION  => 1,
            CURLOPT_HEADER      => 0,
            CURLOPT_RETURNTRANSFER  => 1,
            CURLOPT_USERAGENT   => $curlopt_useragent,
            CURLOPT_URL       => $url,
            CURLOPT_TIMEOUT         => 1,
            CURLOPT_REFERER         => 'http://' . $_SERVER['HTTP_HOST'],
        );
        
        curl_setopt_array($ch, $curl_opt);
        
        $content = curl_exec($ch);
        
        if (!is_null($curl_info)) {
            $curl_info = curl_getinfo($ch);
        }
        
        curl_close($ch);
        
        if ( preg_match('{<li>City : ([^<]*)</li>}i', $content, $regs) )  {
            $city = $regs[1];
        }
        if ( preg_match('{<li>State/Province : ([^<]*)</li>}i', $content, $regs) )  {
            $state = $regs[1];
        }

        if( $city!='' && $state!='' ){
          $location = $city . ', ' . $state;
          return $location;
        }else{
          return $default; 
        }
        
    }

Source: http://snipplr.com/view/48386/detect-location-by-ip-city-state/

Display source code of any webpage

Want to be able to display the source code of any webpage, with line numbering? Here is a simple code snippet to do it. Just modify the url on line 2 at your convenience. Or even better, make a pretty function according to your needs.

<?php // display source code
$lines = file('http://google.com/');
foreach ($lines as $line_num => $line) { 
	// loop thru each line and prepend line numbers
	echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br>\n";
}

Source: http://perishablepress.com/code-snippets/#code-snippets_php

Check if server is HTTPS

Is my script running on a HTTPS server? Good question. This handy snippet can give you the answer. Nothing complicated at all!

if ($_SERVER['HTTPS'] != "on") { 
	echo "This is not HTTPS";
}else{
	echo "This is HTTPS";
}

Source: http://snipplr.com/view/62373/check-if-url-is-https-in-php/

Display Facebook fans count in full text

Want to display how many Facebook fans do you have, in full text, on your blog? It’s very easy using the following snippet:

function fb_fan_count($facebook_name){
    // Example: https://graph.facebook.com/digimantra
    $data = json_decode(file_get_contents("https://graph.facebook.com/".$facebook_name));
    echo $data->likes;
}

Source: http://www.digimantra.com/

Determine the dominant color of an image

This code will be super useful for people managing images or photography website. With it, you can analyze any image and get its dominant color (R, G, or B).

$i = imagecreatefromjpeg("image.jpg");

for ($x=0;$x<imagesx($i);$x++) {
    for ($y=0;$y<imagesy($i);$y++) {
        $rgb = imagecolorat($i,$x,$y);
        $r   = ($rgb >> 16) & 0xFF;
        $g   = ($rgb >>  & 0xFF;
        $b   = $rgb & 0xFF;

        $rTotal += $r;
        $gTotal += $g;
        $bTotal += $b;
        $total++;
    }
}

$rAverage = round($rTotal/$total);
$gAverage = round($gTotal/$total);
$bAverage = round($bTotal/$total);

Source: http://forums.devnetwork.net/viewtopic.php?t=39594

Get info about your memory usage

In order to optimize your scripts, you may definitely want to know how many amount of RAM they use on your server. This snippet will check memory and then print initial, final and peak usages.

echo "Initial: ".memory_get_usage()." bytes \n";
/* prints
Initial: 361400 bytes
*/

// let's use up some memory
for ($i = 0; $i < 100000; $i++) {
	$array []= md5($i);
}

// let's remove half of the array
for ($i = 0; $i < 100000; $i++) {
	unset($array[$i]);
}

echo "Final: ".memory_get_usage()." bytes \n";
/* prints
Final: 885912 bytes
*/

echo "Peak: ".memory_get_peak_usage()." bytes \n";
/* prints
Peak: 13687072 bytes
*/

Source: http://net.tutsplus.com/tutorials/php/9-useful-php…

Compress data using gzcompress()

When working with strings, it is not rare that some are very long. Using the gzcompress() function, strings can be compressed. To uncompressed it, simply call the gzuncompress() function as demonstrated below:

$string =
"Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Nunc ut elit id mi ultricies
adipiscing. Nulla facilisi. Praesent pulvinar,
sapien vel feugiat vestibulum, nulla dui pretium orci,
non ultricies elit lacus quis ante. Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Aliquam
pretium ullamcorper urna quis iaculis. Etiam ac massa
sed turpis tempor luctus. Curabitur sed nibh eu elit
mollis congue. Praesent ipsum diam, consectetur vitae
ornare a, aliquam a nunc. In id magna pellentesque
tellus posuere adipiscing. Sed non mi metus, at lacinia
augue. Sed magna nisi, ornare in mollis in, mollis
sed nunc. Etiam at justo in leo congue mollis.
Nullam in neque eget metus hendrerit scelerisque
eu non enim. Ut malesuada lacus eu nulla bibendum
id euismod urna sodales. ";

$compressed = gzcompress($string);

echo "Original size: ". strlen($string)."\n";
/* prints
Original size: 800
*/

echo "Compressed size: ". strlen($compressed)."\n";
/* prints
Compressed size: 418
*/

// getting it back
$original = gzuncompress($compressed);

Source: http://net.tutsplus.com/tutorials/php/9-useful-php…

Whois query using PHP

If you need to get the whois information for a specific domain, why not using PHP to do it? The following function take a domain name as a parameter, and then display the whois info related to the domain.

function whois_query($domain) {
 
    // fix the domain name:
    $domain = strtolower(trim($domain));
    $domain = preg_replace('/^http:\/\//i', '', $domain);
    $domain = preg_replace('/^www\./i', '', $domain);
    $domain = explode('/', $domain);
    $domain = trim($domain[0]);
 
    // split the TLD from domain name
    $_domain = explode('.', $domain);
    $lst = count($_domain)-1;
    $ext = $_domain[$lst];
 
    // You find resources and lists 
    // like these on wikipedia: 
    //
    // http://de.wikipedia.org/wiki/Whois
    //
    $servers = array(
        "biz" => "whois.neulevel.biz",
        "com" => "whois.internic.net",
        "us" => "whois.nic.us",
        "coop" => "whois.nic.coop",
        "info" => "whois.nic.info",
        "name" => "whois.nic.name",
        "net" => "whois.internic.net",
        "gov" => "whois.nic.gov",
        "edu" => "whois.internic.net",
        "mil" => "rs.internic.net",
        "int" => "whois.iana.org",
        "ac" => "whois.nic.ac",
        "ae" => "whois.uaenic.ae",
        "at" => "whois.ripe.net",
        "au" => "whois.aunic.net",
        "be" => "whois.dns.be",
        "bg" => "whois.ripe.net",
        "br" => "whois.registro.br",
        "bz" => "whois.belizenic.bz",
        "ca" => "whois.cira.ca",
        "cc" => "whois.nic.cc",
        "ch" => "whois.nic.ch",
        "cl" => "whois.nic.cl",
        "cn" => "whois.cnnic.net.cn",
        "cz" => "whois.nic.cz",
        "de" => "whois.nic.de",
        "fr" => "whois.nic.fr",
        "hu" => "whois.nic.hu",
        "ie" => "whois.domainregistry.ie",
        "il" => "whois.isoc.org.il",
        "in" => "whois.ncst.ernet.in",
        "ir" => "whois.nic.ir",
        "mc" => "whois.ripe.net",
        "to" => "whois.tonic.to",
        "tv" => "whois.tv",
        "ru" => "whois.ripn.net",
        "org" => "whois.pir.org",
        "aero" => "whois.information.aero",
        "nl" => "whois.domain-registry.nl"
    );
 
    if (!isset($servers[$ext])){
        die('Error: No matching nic server found!');
    }
 
    $nic_server = $servers[$ext];
 
    $output = '';
 
    // connect to whois server:
    if ($conn = fsockopen ($nic_server, 43)) {
        fputs($conn, $domain."\r\n");
        while(!feof($conn)) {
            $output .= fgets($conn,128);
        }
        fclose($conn);
    }
    else { die('Error: Could not connect to ' . $nic_server . '!'); }
 
    return $output;
}

Source: http://www.jonasjohn.de/snippets/php/whois-query.htm

Email PHP errors instead of displaying it

By default, most servers are set to display an error message when an error occured in one of your script. For security reasons, you may want to get an email with the error, instead of displaying it to the public.

<?php

// Our custom error handler
function nettuts_error_handler($number, $message, $file, $line, $vars){
	$email = "
		<p>An error ($number) occurred on line
		<strong>$line</strong> and in the <strong>file: $file.</strong>
		<p> $message </p>";

	$email .= "<pre>" . print_r($vars, 1) . "</pre>";

	$headers = 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

	// Email the error to someone...
	error_log($email, 1, 'you@youremail.com', $headers);

	// Make sure that you decide how to respond to errors (on the user's side)
	// Either echo an error message, or kill the entire project. Up to you...
	// The code below ensures that we only "die" if the error was more than
	// just a NOTICE.
	if ( ($number !== E_NOTICE) && ($number < 2048) ) {
		die("There was an error. Please try again later.");
	}
}

// We should use our custom function to handle errors.
set_error_handler('nettuts_error_handler');

// Trigger an error... (var doesn't exist)
echo $somevarthatdoesnotexist;

Source: http://net.tutsplus.com/tutorials/php/quick-tip…

  • Agustín

    Nice compilation! ;)

  • http://www.itsananderson.com/ Will Anderson

    How appropriate that the “loop through every pixel in an arbitrary sized image” and “see how much memory PHP is eating up” snippets are right next to each other :)

    Something that is important to note with all of these snippets is that you should cache your data. If you throw one or two of these into a webpage and connect to an external service every time someone visits your website, you’ll find that your pages will be dramatically slowed.

    If you are making external requests, or doing slow calculations (like looping through the pixels in an image), check out the WordPress Transients API. It lets you store information with an arbitrary expiration date, so you can save it for anywhere from 5 minutes to 5 years (or more), depending on how frequently you actually need to update the information.

    http://codex.wordpress.org/Transients_API

  • David

    Interesting snippets but I saw already 8 out of 10 snippets!

  • Erik Lundmark

    Thanks! But I noticed some bad code in “Determine the dominant color of an image”:

    $r = ($rgb >> 16) & 0xFF;
    $g = ($rgb >> & 0xFF; // here
    $b = $rgb & 0xFF; // and here

  • http://www.swordair.com iifksp

    There is a syntax error in 6th snippets: determine the dominant color, I think it should be

    $g = ($rgb >> 8) & 0xFF;

  • http://exposedelements.com Mario

    thanks for the snippets. keep it up

  • http://motyar.blogspot.com Motyar

    Thank you.
    Really very useful snippets, specially that FaceBook fans.
    Thank you for sharing.

    -Motyar

  • Edison Leon

    Awesome, thanks so much.
    Erik, iifksp thank you too.

  • http://www.insitedesignlab.com/blog Jon

    Amazing snippets list, I actually haven’t seen most of these!

  • http://xeroxer.com Magnus “XeroXer”

    NO!
    I don’t see where the “super useful” part is. Most of the snippets don’t seem that useful, but that might just be for me. I guess this site is for programmers and in that case I hope that most of them have heard or seen the majority of these before. Other people might find this great and that’s why I need to point out some things.

    Right now I only have the strength to clean the “Determine the dominant color of an image” snippet and that’s mainly since it gives an error if run as is, and that is uses way to much memory. This mostly because of the imagesx and imagesy functions are run on EVERY iteration of the pixles. This means that if the image is 100×100 pixles the imagesx will run 101 times and the imagesy will run 10100 times (and this increases with the resolution). Not only is this bad programming but it also slows the snippet down mayor. Since we do no modifications to the $i variable there is no need to recalculate the size of that image on every iteration.

    // How it looks now
    for ($x = 0; $x < imagesx($i); $x++) {
    for ($y = 0; $y < imagesy($i); $y++) {

    // Example 1
    for ($x = 0, $iX = imagesx($i), $iY = imagesy($i); $x < $iX; $x++) {
    for ($y = 0; $y < $iY; $y++) {

    // Example 2
    $iX = imagesx($i);
    $iY = imagesy($i);
    for ($x = 0; $x < $iX; $x++) {
    for ($y = 0; $y < $iY; $y++) {

    My favorite is example 2 since I feel it increases readability, there is no speed difference between example 1 and 2. Both examples only run imagesx one time and imagesy one time, the way it should be.

    I also threw a modified version of the snippet on pastie.org: http://pastie.org/3203289
    Take note of that I have not modified the core parts of the snippet and the snippet might perform even better if that modification is also made, maybe another day.

    The error the original snippet created was that the smiley 8) had been removed from the forum where you took the snippet from. It was also commented on further down in the thread. Since the RGB part is taken from the PHP Manual it was easy to find the problem part.
    http://php.net/manual/en/function.imagecolorat.php#refsect1-function.imagecolorat-examples

    On the PHP Manual page http://php.net/manual/en/control-structures.for.php you can also read:
    "This code can be slow because it has to calculate the size of the array on each iteration. Since the size never change, it can be optimized easily using an intermediate variable to store the size and use in the loop instead of…"
    Great point for any PHP programmer to check the manual from time to time as you can find great examples even for the most basic functions.

  • Dylan

    On all the servers I’ve ever worked on, $_SERVER['HTTPS'] is only set if the page is being served through HTTPS. In other words, if you have all errors turned on and the page is served over HTTP, this snippet will generate a warning that $_SERVER['HTTPS'] isn’t set. Better to just use isset():

    $is_https = isset($_SERVER['HTTPS']);

  • http://zck.in ugh

    This is depressing.

  • Vijeet Deliwala

    Thanks………….But I have to change CURLOPT_TIMEOUT => 30 in the first IP detect script instead of 1……….Maybe because here internet is not so fast to fetch it in 1 ………

  • http://www.telecomblog.info/ Nitin

    Don’t understand why these are super useful.

  • http://www.pdvictor.com Peter Drinnan

    Can’t understand why Nitin doesn’t see any use in these. Just the Facebook Fans counter is immediately useful to me.

    Thanks for sharing.

  • http://www.telecomblog.info Nitin Sharma

    Great compilation but I have already seen 9 out of those 10. The only one I had not seen was “Getting the dominant color of an image.”

  • http://arizona-cpr.com/ Mike Bennette

    Ugh, how am I supposed to figure all this out. Thanks for posting though..

  • Aliaksandr

    // let’s use up some memory
    for ($i = 0; $i < 100000; $i++) {
    $array []= md5($i);
    }

    // let's remove half of the array
    for ($i = 0; $i < 100000; $i++) {
    unset($array[$i]);
    }

    Half of the array? i see, we remove full range of array

  • http://www.nerdyllama.com Nerdy Llama

    I love when a developer does tutorials and provides code snippets for functions that have real world use. Some are problems a developer/designer runs into on a daily basis. You just gained another follower. Keep up the great post.