PHP – 10 helpful PHP functions and snippets

Sanitize database inputs

When inserting data in your database, you have to be really careful about SQL injections and other attempts to insert malicious data into the db. The function below is probably the most complete and efficient way to sanitize a string before using it with your database.

function cleanInput($input) {

  $search = array(
    '@<script[^>]*?>.*?</script>@si',   // Strip out javascript
    '@<[\/\!]*?[^<>]*?>@si',            // Strip out HTML tags
    '@<style[^>]*?>.*?</style>@siU',    // Strip style tags properly
    '@<![\s\S]*?--[ \t\n\r]*>@'         // Strip multi-line comments

    $output = preg_replace($search, '', $input);
    return $output;
function sanitize($input) {
    if (is_array($input)) {
        foreach($input as $var=>$val) {
            $output[$var] = sanitize($val);
    else {
        if (get_magic_quotes_gpc()) {
            $input = stripslashes($input);
        $input  = cleanInput($input);
        $output = mysql_real_escape_string($input);
    return $output;

Here’s some examples of use:

  $bad_string = "Hi! <script src=''></script> It's a good day!";
  $good_string = sanitize($bad_string);
  // $good_string returns "Hi! It\'s a good day!"

  // Also use for getting POST/GET variables
  $_POST = sanitize($_POST);
  $_GET  = sanitize($_GET);


Calculate distance between two points

Want to be able to calculate the distance between two points? The function below use the latitude and longitude of two locations, and calculate the distance between them in both miles and metric units.

function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2) {
    $theta = $longitude1 - $longitude2;
    $miles = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)));
    $miles = acos($miles);
    $miles = rad2deg($miles);
    $miles = $miles * 60 * 1.1515;
    $feet = $miles * 5280;
    $yards = $feet / 3;
    $kilometers = $miles * 1.609344;
    $meters = $kilometers * 1000;
    return compact('miles','feet','yards','kilometers','meters'); 


$point1 = array('lat' => 40.770623, 'long' => -73.964367);
$point2 = array('lat' => 40.758224, 'long' => -73.917404);
$distance = getDistanceBetweenPointsNew($point1['lat'], $point1['long'], $point2['lat'], $point2['long']);
foreach ($distance as $unit => $value) {
    echo $unit.': '.number_format($value,4).'<br />';


Get all tweets of a specific hashtag

Here’s a quick and easy way to get all tweets of a specific usage using the useful cURL library. The following example will retrieve all tweets with the #cat hashtag.

function getTweets($hash_tag) {

    $url = ''.urlencode($hash_tag) ;
    echo "<p>Connecting to <strong>$url</strong> ...</p>";
    $ch = curl_init($url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $xml = curl_exec ($ch);
    curl_close ($ch);

    //If you want to see the response from Twitter, uncomment this next part out:
    //echo "<p>Response:</p>";
    //echo "<pre>".htmlspecialchars($xml)."</pre>";

    $affected = 0;
    $twelement = new SimpleXMLElement($xml);
    foreach ($twelement->entry as $entry) {
        $text = trim($entry->title);
        $author = trim($entry->author->name);
        $time = strtotime($entry->published);
        $id = $entry->id;
        echo "<p>Tweet from ".$author.": <strong>".$text."</strong>  <em>Posted ".date('n/j/y g:i a',$time)."</em></p>";

    return true ;



Applying Even/Odd Classes

When generating lists or tables using php, it is super useful to apply even/odd classes to each row of data in order to simplify CSS styling.

Used inside a loop, class names would be named




alternating. Increasing the “2″ number allows you to increment in thirds or fourths or whatever you need:

<div class="example-class<?php echo ($xyz++%2); ?>">


Email error logs to yourself

Instead of publicly displaying possible errors on your website, why not using a custom error handler to email error logs to yourself? Here’s a handy code snippet to do it.


// 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, '', $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.

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


Automatically creates variables with the same name as the key in the POST array

This snippet is very helpful for every POST processing. All you need is an array with expected keys in the POST array. This snippet automatically creates variables with the same name as the key in the POST array. If the key is not found in the POST array the variable is set to NULL. Basically you dont need to write:


This snippet will do this boring part of every PHP code with POST handling so you can fully focus on a validation of the input, because that is much more important.

foreach($expected as $key){


Download & save a remote image on your server using PHP

Here’s a super easy and efficient way to download a remote image and save it on your own server.

$image = file_get_contents('');
file_put_contents('/images/image.jpg', $image); //save the image on your server


Create data uri’s

Data uri’s can be useful for embedding images into HTML/CSS/JS to save on HTTP requests, at the cost of maintainability. You can use online tools to create data uri’s, or you can use the simple PHP function below:

function data_uri($file, $mime) {
  echo "data:$mime;base64,$base64";


Detect browser language

When developing a multilingual website, I really like to retrieve the browser language and use this language as the default language for my website. Here’s how I get the language used by the client browser:

function get_client_language($availableLanguages, $default='en'){

		foreach ($langs as $value){
			if(in_array($choice, $availableLanguages)){
				return $choice;
	return $default;


Add (th, st, nd, rd, th) to the end of a number

This simple and easy function will take a number and add “th, st, nd, rd, th” after it. Very useful!

function ordinal($cdnl){ 
    $test_c = abs($cdnl) % 10; 
    $ext = ((abs($cdnl) %100 < 21 && abs($cdnl) %100 > 4) ? 'th' 
            : (($test_c < 4) ? ($test_c < 3) ? ($test_c < 2) ? ($test_c < 1) 
            ? 'th' : 'st' : 'nd' : 'rd' : 'th')); 
    return $cdnl.$ext; 
    echo ordinal($i).'<br>'; 



reblogged from cats who code

Peter Sunde’s Talk at the Transmediale 2015

This is said by the guy who co-founded the pirate bay, attempted a couple of startups and went to prison

There’s a few big moments in life where you feel that something moves you deeply.
Graduating school. Getting your first kiss. Writing that first book, publishing that first scientific document.
A loved one dies. Getting your first customer in your café. Some of them might seem small and trivial to others but to you they are huge and life altering.

Recently I got a similar feeling. A feeling that we reached a certain critical mass. A critical mass that are upset with the current state of the internet, nay, the current state of policing the internet and what it promises the world.
A critical mass that finally understands that we’re on the way to a broadcast democracy with little peer involvement.

What happened? The Pirate Bay was shut down. It tilted people’s brains into knowing that tomorrow, their favorite TV show must be downloaded somewhere else.
They thought about it a bit more and decided this is the beginning of a slippery slope.
They understand that maybe this means that alternative content might be hard to ever reach, if at all.
That this thing, that we’re centralising the internet, having just a handful of centralised services, mostly owned by companies in one single country, a country that doesn’t care about borders when it comes to their own gauntlets, is not a great idea.
A movement is forming. A movement away from this. And tomorrow, when you wake up, it will climax into a whole bunch, maybe even a whole million of people, that will see the group “Stop destroying the internet” or “Give us our pirate bay back” on Facebook.
And they will click the Like button and feel proud. They finally did it. They stopped the internet from being destroyed.

But of course this will not change anything. The internet will keep getting destroyed, it will keep becoming more and more centralised.
We can’t do anything anymore. We tried. We sucked at it. The few people that really did anything are now old, some are dead.
The young ones believe in the system and try to change it from with-in.
It’s like trying to beat capitalism by trying to capture all the money yourself.

Every now and then we win a fight against one of the oppressive new measures, like ACTA, SOPA, PIPA.
We congratulate ourselves and feel important. In essence, we just lost the ten other battles we didn’t have time to fight. Or knew existed.

We have our own celebrities. We had Wikileaks. We had Snowden. We had Manning. We had Aaron Swartz. Some are dead, some are in jail forever.
Some are in hiding — scared for their actual lives. What people reveal, what people fight for, are major causes.
Freedom of information. Liberty. Democracy. Governmental transparency and due process. Things we take for granted, that are the basis for a modern safe society.
We talk about it a lot. We are upset. We cry, we scream. We sometimes protest. We have our T-shirts. We have our symbols. We have our masks, our conferences, our transmediale. Our debates. We get some attention.
People in general like us. Our opponents are old fat bastard whore corporate sell-outs. They’re mostly rich men from the United States of America. They’re corrupt. They’re easy to hate. It’s all like a good old Hollywood movie.

But we’ve all been fooled. We lost. There is no need in fighting anymore. We lost a long time ago, we cornered ourselves. There’s no use to struggle. There’s no point in being positive. The only positive thing about it is that we no longer have to worry. It’s all pre-determined, it’s all a waste. There’s no more any “we” or “us”. We’re becoming drones, mind or without, it does not matter.

We built the system. We trusted it because we trusted ourselves. We’re all drones now. Maybe we’ve always been drones.

You might know that I was recently locked up. I was kidnapped by the kingdom of Sweden, for trying to resist. I did right, both legally and morally. The kingdom was wrong. We all knew it, but I was a fool to think that right and wrong had anything to do with it. Morals are no more. They’ve been replaced by control. Right is just a word that no longer has any meaning. It’s a trick to keep people from being scared. Until you reach the edge you believe in the system. Even though people know in their back of their minds that they don’t want to look over the edge.

We all praise the internet for the liberty it brings but it’s become the essence of what’s wrong. We praise the technology almost like a saviour but it’s the thing that keeps us in check. We show the examples of the good things we’ve achieved with technology, with the internet, with leaking, with sharing.
But it does not hold it’s merits. There’s no long-term effect. Globalization by virtue of capitalism won.

We talk about robots and technology taking our jobs. As if jobs has a higher goal in themselves beside what needs to be done. But when building these computerized and automatic systems we created new jobs. All the new technology based jobs in the western world feel so free, it’s almost like you’re never at work. We even have our offices at home.
We’re always connected. We happy we get to work with our friends. We don’t see that we’ve become robots that work all the time, only associate with other co-workers and that we have no free time anymore.
We don’t need robots, we are the robots. We’re no longer in between jobs, we’re in between our old and new startups.

We talk about startups and entrepreneurship as the future. As if they are something new.
We out-manouvered ourselves into believing that alone means strong.
Who ever heard about a startup going on strike against their customers over bad work conditions?
We’re fucking up all the work done by the unions for the past century.
For the promise of self-fulfilment, sour-dough bread, cool bicycles and a cheap apartment in Kreuzberg with second-hand IKEA furniture.
The same furniture I recently discovered first-hand is made by forced labourers in swedish and german prisons.

There’s no point in fighting. Whatever you think you can contribute it’s wrong. Life is not pointless but trying to alter the content and path of life is futile. We’re all privileged and lazy. We never talk about revolutions anymore, except when creating a new hipster fixed-bicycle wheel that will “change the world”, a term which today is slang for getting fifteen minutes of fame for your product – not you.
And no, you’re not the product as everyone has been saying about the internet. You’re not that interesting. You’re just the wallet.

Call it activism, call it work, call it art, call it whatever you want. I’ve tried. My friends tried. You all tried. But capitalism won. It’s game over.
We’re too lazy, we’re too tired. We’re too content. We just want our nespresso machines and we don’t want any responsibility.
We blame our politicians even though we elect them. The politicians have no say anyhow. It’s not about the money, it’s about the control.

It’s not that we’re blind. In the matrix Neo get’s to decide – does he want to live in blissful ignorance or does he want to see the real world?
When he decides to leave the matrix he wakes up and realizes he is just one of many humans that are being kept as resources.
It wakes him up so hard that he can’t ignore fighting the matrix.
But in our world we see the issues daily. We see the beggars, we see the gender inequality. We see the rain forest being wrecked, the oil heating the planet, whales being slaughtered.
We see our human rights being violated, we see the loss of privacy, we know we’re monitored by cameras and microphones everywhere. We even carry them around ourselves to help our opponents.
The leaks from manning and snowden has not changed one single thing of essence.
We’re not blind, we’re totally full-sighted and awake.
It’s very telling that for some reason there’s even career opportunities in being a manager of human resources. We can’t wake up from being awake.

This years Transmediale is named “capture all”. For me that phrase might refer to something else than it does for you.
But my view is that a few is trying to capture all. They’re capturing all the control, all the money, all the information, all the politicians, all the power. We’re not even trying to stop it, we’re helping them do it. On second thought, they’re not trying to capture it. They already captured all.

The only way to win the game is not to play. But if we have to play, it’s time we set the rules. And re-capture all.

java – Create a Dictionary from a text file.

It takes a text file as input and outputs all the words in that file in alphabetical order, one word per line, ignoring duplicates.


import java.util.*;
public class Dictionary {

public static void main(String[] args) {


FileReader fr = new FileReader("words.txt");

BufferedReader br = new BufferedReader(fr);

String s;

String word = null;

String[] arrayWords;

ArrayList aListWords = new ArrayList();

int j = 0;while((s = br.readLine()) != null) {

Scanner scan = new Scanner(s);

while (scan.hasNext()) {

word =;









int size = aListWords.size();

for(int i = 0; i &lt; size ; i++){

System.out.println( aListWords.get( i ) );



} catch (Exception e){//Catch exception if any

System.err.println("Error: " + e.getMessage());



public static void removeDuplicates(ArrayList aList) {

HashSet h = new HashSet(aList);





Java – How to add a spell checker to Swing GUI text components JOrtho Library and Wikitionary Dictionaries

This tutorial uses JOrtho, a Java based spell checker, to implement a spell checker in a Swing based application.

We are going to use an English dictionary throughout this guide, though other languages are available by downloading your language dictionary from

JOrtho (Java Orthography) is an Open Source spell-checker entirely written in Java. Its dictionaries are based on the free Wiktionary project and can therefore be updated for virtually any language. The library works with any JTextComponent from the Swing framework. This includes JTextPane, JEditorPane and JTextArea.

1) Firstly, get a copy of the JOrtho libraries available here.

Once you have a copy of the zip file you’ll extract the contents and find a file named jortho.jar.

Add the jar file to your classpath or project; In Netbeans, for example, right-click your project and select Properties. Select Libraries from the Categories context menu and hit Add JAR/Folder. Navigate to the folder containing jortho.jar, select the file and click Open.


lib1 lib2

Once successfully completed you’ll see jortho.jar under the libraries node in the object explorer.

2) Download/Create the dictionary file for your desired language.

You can create & compile your own dictionary from data available at with instructions found here.

Create a folder named dictionary within the src folder of your application (src/dictionary/) and copy in two files from the downloaded zip:

  • dictionary_en.ortho
  • dictionaries.cnf


Dictionaries.cnf will open in a text editor where you’ll see a comma-separated list of supported languages. Remove any languages not supported in your project.

We will change the following line: languages=de,en,it,fr,es,ru
to: languages=en


3) We can now head over to your development environment and begin coding the spell checker.

Well assume you’ve already started your project, your GUI is built and that it contains one or more text input elements on a form.

Edit your code to include the following two import statements at the head of the document:

import com.inet.jortho.SpellChecker;
import com.inet.jortho.FileUserDictionary;

Add the following lines of code to initialise and register the dictionary:

String userDictionaryPath =/dictionary/;
SpellChecker.setUserDictionaryProvider(new FileUserDictionary(userDictionaryPath));
SpellChecker.registerDictionaries(getClass().getResource(userDictionaryPath), “en”);

Finally, register the Swing text components with the spell checker. You can register as many components as required by your application by substituting the placeholder field names with the name of your components:


We’ll clean things up by placing the spell checker initialisation code within a method, which we’ll call on application start up:

Screen Shot 2014-11-10 at 17.29.00


4) Compile & run your application!

That’s all you need to include the JOrtho spell checker in your Java Swing application. Run your app and test the theory by typing a mixture of correctly & incorrectly spelt word in the input form. Misspelt words are highlighted by a red zig-zag line underneath. Right-click on the word to reveal the pop-up suggestion list.

4b 4a 4


5) Customising the suggestion pop-up

We’re supporting only the English language in our app so we have no need to display the language selector in our pop-up menu.

I’d also like to ignore case, set a limit of 10 alternative suggestions, ignore ALL CAPS WORDS & ignore words with numb3rs – all configurable with a custom pop-up menu.

Add three more imports into your code:

import com.inet.jortho.SpellCheckerOptions;
import javax.swing.JPopupMenu;
import com.inet.jortho.PopupListener; //for options when got to that part

Initialise a SpellCheckerOtions object:

SpellCheckerOptions sco = new SpellCheckerOptions();

Configure the options as required by your application:

JPopupMenu popup = SpellChecker.createCheckerPopup(sco);

Finally, add the customised pop-up menu to the components as required:

jTextField1.addMouseListener(new PopupListener(popup));

Once again, we’ll clean things up by placing the SpellCheckerOtions initialisation code within a method, which we’ll call right after initialiseSpellChecker():


You’ll notice the pop-up menu go straight into the suggestions list with the customisations described above:





Ten Time-Savers in NetBeans

The NetBeans IDE(Integrated Development Environment) has come a very, very long way. Our Java curriculum development group uses this tool everyday in the development of training materials and NetBeans is the default development environment for students. As a result, we have compiled a set of ten time saving features that we thought you ought to know about this powerful tool – features that make the development of Java software easier. So counting down the top ten (and these are no particular order), let’s start by reducing the amount of typing needed for common methods.

Number 10: Use typing shortcuts!

Two of my most used shortcuts are psvm and sout. Huh?

NetBeans has defined a number of code templates (abbreviations) to reduce the amount of typing required for common methods, field declarations and more. The two that I use the most are “psvm” to declare a public static void main (String args[]) { method, and “sout” to declare a System.out.println(“”); method. To use this functionality, simply put the cursor into you Java class and type the characters, psvm, followed by the Tab key:

That’s a lot less typing! My second most used shortcut is sout, to create a standard console printed message:

Notice that NetBeans also places the cursor in exactly the right place – you simply start typing right after the Tab key. A list of shortcuts and a number of other helpful features are listed on the NetBeans ReferenceCard, which is available through the Help menu or online at You can view the complete list by opening the Tools->Options menu within NetBeans and viewing the Editor->Code Templates and the Keymap sections. There you can view, customize, and even define your own shortcuts.

Number 9: Comment out a block of code

Sometimes you need to comment out a block of code, either to test to see if something is working (or broken) and sometimes because you changed your thinking on some program logic. I find that deleting code is not a good idea – you might find that what you thought you didn’t need was actually really important! So instead, select the code and comment it out in a one action with Ctrl-Shift-C. And, by the way, it works in reverse too – uncomment that code later with the same key sequence. If you prefer using the mouse, you can also use the buttons  at the top of the editor window to comment and uncomment.

Number 8: Use global replace

Sometimes you create a field or a method name that after careful thought, well, it just isn’t right…. Rather than hunting through a long class and laboriously replacing each occurrence one at a time, NetBeans has a way to replace every instance in your class all at once!

For example, in this code fragment, empArray really doesn’t say what this field will contain – and, it isn’t even an array. So what I really want is to rename every instance of empArray to employeeData, all at once. Simply click in the field, and all of the fields in the class will highlight. Then press Ctrl-R (or right-click and then Refactor -> Rename) to start replacement.

Voila! Note: unfortunately, this doesn’t work if your code has unsresolved elements – so do this after your code compiles correctly.

Number 7: Use auto format

Nobody likes ugly code! In fact, 4 out 5 Java developers will refuse to work on code that is not properly formatted. Ok, I made that up. But imagine that you are trying to debug the code on the left (with apologies to the Java tutorial). To make it easier to read, and determine the actual flow, simply press Alt-Shift-F (or right-click and choose Format) to reformat the code. the result is the image on the right. This feature will also take care of leading and trailing space – it does not remove blank lines between code lines, which is nice if you want to separate methods and fields from each other.

Number 6: Which file am I working on?

As course developers, we often have files with the same name that belong to different projects open in the editor at the same time. One file belongs to practice 1, and the other practice 2. More than once I’ve been editing a file only to discover it was in a different project than the one I had open. There is a great feature in NetBeans to determine which project a file belongs to. In the image below, I have two files open. If I click in the file and press ” style=”background-color: #ffff00;” class=”bki-span”>Ctrl-Shift-1 (or right-click on the tab that contains the file name and choose “Select in Projects”), the project that contains that file will open in the Project Tab and highlight the file.

Number 5: Close all open files

At some point, you will have opened 10, 20 or more Java class files, XML files, and other assorted files all at the same time. Sometimes, when there are that many files open, trying to remember what you were working on and what you need to do becomes overwhelming. The answer? Reboot. No, not your machine, reboot your editor pane! Press Ctrl-Shift-F4 and all of the open file will close. If you had any open with unsaved edits, you will get a prompt to save the files. Then you can start your thinking process again with a clean slate.

Number 4: Fix imports automatically

When you are writing code, stopping your train of thought to track down a missing import statement, and resolve compilation errors such as “cannot find symbol” could be a tedious chore if you had to do it yourself. One of my favorite features in NetBeans is Ctrl-Shift-I (Fix Imports). This simple keystroke combination will track down missing import statements and fill them in for you, automatically. And if there are two classes with the same name in different packages and Fix imports can’t figure out which class you want from the other import statements, it will allow you to choose which one you mean to include.

But wait, there’s more! Fix imports will also remove extraneous imports and order them, neat and tidy!

Number 3: Make the javadoc work for you – use autocomplete!

Anyone who has memorized the entire javadoc, all the packages, classes and methods, well, that person has too much time on their hands! When we are coding, we understand what we are trying to do in the code, but not necessarily all of the method names and parameter syntax. Instead, make sure that you have the javadocs you need and use autocompletion to help choose which method you want, which field, which enum, even which tag in JSF and JSP files. Simply type a part of a class, a method name or the . (dot) to evaluate which method the object can call and press Ctrl-Space.

BTW, because NetBeans is always trying to help out, you may have seen this popup and go away without really knowing how to get it back, so know you know – Ctrl-Space. Notice in this simple example, I typed part of the ubiquitous System.out, and then after the dot pressed Ctrl-Space and selected the append method. On top is the javadoc and below is the method signature I could select simply by clicking on it.

Number 2: Auto-generate getters and setters, constructors and more!

The JavaBeans pattern is one of the most used coding patterns. Simply put, a JavaBeans has properties that are accessed or mutated through methods. Most often the properties represent fields in your class. The property methods follow a pattern, with getXXXX and setXXXX, where XXXX is the property (field) name. The simplest way to generate this code is to create your class, add the fields you want, click in the line after the fields and select Alt-Insert to open the Generate dialog and choose Getter and Setter. Then individually choose the fields, or select the class to generate a getter and setter for every field!

Poof! As if by magic I have a set of 5 getters and 5 setters inserted into my Employee class.

Using the same Generate feature above, you can also generate constructors, loggers, override Object equals, hashcode and toString, override methods of the parent class and more.By generating a constructor and then just getter methods, you have a nice immutable class.

Number 1: Compare files to see what’s changed

Probably the best kept secret of NetBeans is the Diff Tool. We use this tool a great deal when creating training, as the labs we write tend to be on a single project that changes from one lab forward to the next. As a result, we often have copies of classes with differences based on the lab. However, for anyone creating copies of files and making changes between copies, this tool is an absolute time saver! Simply select one file, then click Tools -> Diff and choose the second file. they don’t have to be the same name or even be open at the same time.

As shown in the image below, the diff tool has two modes, one to graphically show the differences and a textual differences tool as well. You can swap left and right, export the differences to another file and even set the granularity of the differences with Options. But if you’re like me, just the standard graphical view tells the whole story in glorious color!