Programming

Programming

Faster Alternative to PHP’s Array Unique Function

Overview

Using PHP’s function array_unique() allows you to take an array of values and remove the duplicates leaving you with an array with unique values. This function works best most of the time, however if you find yourself trying to use array_unique on massive arrays, it may slow down quite a bit.

Instead of using array_unique to create a distinct array, there is another nifty array function that will speed things up called `array_flip()`. With this magic function, it swaps each of the array’s key with its value and since keys must be unique, then you will be left with the same result as if you had used array_unique()

Faster Alternative to PHP’s Array Unique Function

/* create our array of 4 elements with duplicate values */
$array = array('green','blue','orange','blue');

/* flip the array now we will have an array with unique keys
	array('green'=>0,'blue'=>1,'orange'=>2); */
$array = array_flip($array);

/* and then flip the array back to put the keys and values where they are meant to be leave us with array(0=>'green',1=>'blue',2=>'orange'); */
$array = array_flip($array);

Since we have now removed a number of elements the array keys may not be in sequence. For example we may be left with array(0=>’A’,2=>’B’,5=>’C’);. In some situations, this is not an issue, however if you rely on the array keys being in numerical sequence, you can one of two things to fix the array keys.

Fix array keys using array_merge()

Add the following after the array flip to sort out the array keys and put them back into sequence, i.e. 0, 1, 2, 3, …

$array = array('green','blue','orange','blue');
$array = array_flip($array);
$array = array_flip($array);

/* Use array_merge() to fix the keys */
$array = array_merge($array);

Second method using array_keys()

Note, this method of fixing the array keys is marginally faster than using the array_merge() method
You could also combine the last step to use array_keys – which at the time would be the flipped values. Then once you flip the values, the keys will be created in order.

$array = array('green','blue','orange','blue');
$array = array_flip($array);
/* Same as first example, except now we first extract array keys */
$array = array_keys($array);

Note: Thanks to yehosef for helping fix and improve the above code.

Conclusion

Easy as that! and can have a significant increase in performance on massive arrays over using array_unique.

Validate Email Addresses – Javascript and PHP Example

Overview – Validate Email Addresses – Javascript and PHP Example

In todays article I will show provide you with source code validate email addresses using either Javascript or PHP. It uses a regular expression to test if the string passed to is a valid email address and returns true or false in either case. It works well for me and will hopefully do the trick for you.

Javascript Example using the function: test()

<script type="text/javascript">

/* validate an email address */
function validateEmail( em ) {
	var pattern = /^[a-z\d]+(?:[\-\.\_][a-z\d]+)*[a-z\d]+@[\w\d]+(?:[-\.][a-z\d][a-z\d\-]*[a-z\d])*[a-z\d]+\.([a-z]{2,4})(\.([a-z]{2,4}))*$/i;
	return (pattern.test(em)) ? true : false;
}

</script>

In order to use the javascript validate email address function, simply include the above function in your javascript or separate include file and then call it using

<script type="text/javascript">
var bValidEmail = validateEmail('somemail@example.com');
</script>

PHP Example using the function: preg_match()

<?php

/* validate an email address */
function validateEmail( $em ) {
	$pattern = '/^[a-z\d]+(?:[\-\.\_][a-z\d]+)*[a-z\d]+@[\w\d]+(?:[-\.][a-z\d][a-z\d\-]*[a-z\d])*[a-z\d]+\.([a-z]{2,4})(\.([a-z]{2,4}))*$/i';
	return preg_match($pattern,$em) ? true : false;
}

?>

In order to use the php validate email address function, simply include the above function in your php or separate include file and then call it using

<?php
$bValidEmail = validateEmail('somemail@example.com');
?>

Get Total Directory Size In PHP

Overview – Get Total Directory Size In PHP

In my previous article called Get and Display Hard Disk Space Usage Using PHP I demonstrated how you can fetch and display the size of a hard disk as well as the free space and used space and display it to the user. While this works well it still doesn’t show how to get the size of a specific folder using PHP.

Get total directory size in PHP

Below I have created an example showing an alternate method to get total directory size in PHP. It makes use of the shell command du -sh (disk usage) and then uses a regular expression to fetch just the number of bytes out of the output generated by the du command.

<?php

// we need the full path to the folder we want to find the size of
//	below we result in a folder path of /var/www/mywebsite/html/files
$folder = $_SERVER['DOCUMENT_ROOT'].'/files';

// now prevent malicious attacks since we are executing a shell command
$folder = escapeshellcmd($folder);

// make sure this is a folder
if( ! is_dir($folder) )
{
	echo "$folder is not a folder.<br />";
}
// if we could find the pattern of our command du -s
else
{
	// we execute du (disk usage) to find out the folder size
	//	notice we use the execution operator (the key to the left of 1 on your keyboard)
	//	this is the same as the php function shell_exec()
	//	you can add the -h flaf to the below command to format the file size into MB, GB, etc.
	//		i.e. `du -sh $folder`;
	$output = `du -s $folder`;

	if( preg_match('/([0-9]+)(t.*)/',$output,$match) )
	{
		$size = $match[1];

		// $size will now hold the size of the folder
		echo "Folder $folder is $size bytes<br />";
	}
	else
	{
		// error
		// either we can't execute du -s command (such as windows users) or the folder doesn't exist
		echo "Error fetching folder size, are you on Linux? and can you execute commands?<br />";
	}
}

?>

Display Disk Free Space Percentage In PHP

Overview – Display Disk Free Space Percentage In PHP

Have you ever needed a nice little progress bar on your website to display disk space free percentage? This can be handy if you would like to give your clients an indication on how much disk space free they have on their own virtually hosted website, or perhaps you need a simple web interface to keep an eye out on your server health. In any case, this progress bar will accurately show you how much disk space free and disk space usage on your server.

Checkout out a follow up article called showing an alternate way to determine the total size of a folder using php.

End Result – What This Article Will Achieve

Get Total Directory Size In PHP

Get Total Directory Size In PHP

Once you have copied and implemented the code shows in the 3 steps, you should have a tidy progress bar that will show you your disk usage on your server. Below is an image of what it should look like if you have followed the steps correctly.

 

Step 1 – PHP Code

Place this code into a PHP script inside the web directory of your choice. All three steps can be included into the same PHP file or seperated if requried.

<?php

/* get disk space free (in bytes) */
$df = disk_free_space("/var/www");
/* and get disk space total (in bytes)  */
$dt = disk_total_space("/var/www");
/* now we calculate the disk space used (in bytes) */
$du = $dt - $df;
/* percentage of disk used - this will be used to also set the width % of the progress bar */
$dp = sprintf('%.2f',($du / $dt) * 100);

/* and we formate the size from bytes to MB, GB, etc. */
$df = formatSize($df);
$du = formatSize($du);
$dt = formatSize($dt);

function formatSize( $bytes )
{
	$types = array( 'B', 'KB', 'MB', 'GB', 'TB' );
	for( $i = 0; $bytes >= 1024 && $i < ( count( $types ) -1 ); $bytes /= 1024, $i++ );
		return( round( $bytes, 2 ) . " " . $types[$i] );
}

?>

Step 2 – CSS Style Sheet

Place this code into a CSS style sheet inside the web directory of your choice. The CSS code can be included into the same PHP file created in step 1 or seperated into its own CSS file if required, however since it is executing php code to create the width of the element, it should not be placeed inside a separate css file.

<style type='text/css'>

.progress {
	border: 2px solid #5E96E4;
	height: 32px;
	width: 540px;
	margin: 30px auto;
}
.progress .prgbar {
	background: #A7C6FF;
	width: <?php echo $dp; ?>%;
	position: relative;
	height: 32px;
	z-index: 999;
}
.progress .prgtext {
	color: #286692;
	text-align: center;
	font-size: 13px;
	padding: 9px 0 0;
	width: 540px;
	position: absolute;
	z-index: 1000;
}
.progress .prginfo {
	margin: 3px 0;
}

</style>

Step 3 – HTML Code Including the Progress Bar

Place this code into an HTML file inside the web directory of your choice. The HTML code can be included into the same PHP file created in step 1 or seperated into its own file if required.

<div class='progress'>
	<div class='prgtext'><?php echo $dp; ?>% Disk Used</div>
	<div class='prgbar'></div>
	<div class='prginfo'>
		<span style='float: left;'><?php echo "$du of $dt used"; ?></span>
		<span style='float: right;'><?php echo "$df of $dt free"; ?></span>
		<span style='clear: both;'></span>
	</div>
</div>

Get Last Day Of Month MySQL And PHP

In order to get last day of month in mysql or php, you can use built in functions. As you will soon see below it is a rather straight foward task. I will show you two examples on how to get the last day of the month in mysql as well as php. In php you can use the date() function and in mysql we will make use of the last_day() method.

Get last day of the month PHP

PHP has a date function which returns a string representation of the date formatted according to the expression passed to it. So the simple way is to use the ‘t’ identifier in the date function which will return the last day of the month.

echo date('Y-m-t',strtotime('2014-01-12')); // echo's 2014-01-31
echo date('t M Y'); // echo's 31 Jul 2014

Get last day of month MySQL

MySQL has a function called last day that will return the last day of the date supplied to it. It can be the date of the current month or any other month.

SELECT last_day(CURDATE() - INTERVAL 1 MONTH) AS last_month;
SELECT last_day(CURDATE()) AS current_month; 
SELECT last_day(DATE('2014-03-12')) AS march_month

Conclusion

As you can see, getting the last day of the month is a simple task. If you get stuck, let me know in the comments.

Install PHP Pear and Pear Packages

What is PEAR?

PEAR is an acronym for PHP Extension and Application Repository. PEAR is a massive repository for PHP code. It provide easy access to hundreds of classes that can be implemented into your existing PHP project. It saves you time since you won’t have to write anything from scratch and you can simply reuse the code from the PEAR repository.

A few examples of the types PEAR packages available to you are packages such as encryption, mailing, image manipulation, benchmarking, caching, authenticating and so much more.

Install PHP Pear

Now that you know what PEAR is, you may be asking “how do i install PHP PEAR?”.

Under Debian this is quite simple. Enter the following command and it will download and install PEAR for you straight out the box.

$ apt-get install php-pear

It should really be that simple.

Installing a PEAR Package for PHP

Once you have installed PEAR, you can being installing all your much needed PEAR packages. To do this is a matter of entering the following:

$ pear install package-name

Where package-name is the name of the PEAR package you wish to install. So if I wanted to install the Auth_HTTP package, I would do this:

$ pear install Auth_HTTP

Upgrading a PEAR Package for PHP

Now to upgrade a PEAR package is pretty much the same as installing it.

$ pear upgrade package-name

Conclusion

Using PEAR packages will rapidly speed up your development since you will be using classes that are already complete with all the functionality you require instead of manually having to code from scratch. You can then focus on what is important, building amazing websites and programs that amaze everyone who comes to visit!

Validate Email Address Online

Use the form below to check email address is valid. Simply enter an email into the box below and hit ‘validate’ to validate the email address online. It simply makes sure the format of the email address is correct and does not verify that the email address actually exists or belongs to anyone.

Validate Email Address Online

You can get the code used to test the email address in this example by clicking here.
Enter Email Address and Click Validate

What is eAccelerator for PHP

Overview

Before we can understand how eAccelerator (http://eaccelerator.net/) will help speed up your websites loading speed, it is important to realise how php scripts are executed and run to power your websites.

Executing PHP Scripts

When you create a php script to do amazing things like pulling information out of a MySQL database or connecting to a web service to perform complex authentication or other wondrous things, the php script must be compiled into byte-code before it can be run by the web server. The result of this is that each time a user accesses that specific php script, usually through your website, that script is then compiled and then executed. When multiple people access the same script, it is being recompiled over and over which can slow down your website and essentially puts an extra bit of strain on the web server it is being run on.

What is eAccelerator for PHP

Now this is where eAccelerator comes into play. eAccelerator is a php extension that you install onto a web server. After it is installed, each php script will then automatically be precompiled the first time they are executed and also stored for later. Now each time the script is accessed, the pre-compiled script is executed without the need of having to compile the script first.

Interested in installing eAccelerator? I have created a quick tutorial on how to install eAccelerator on Debian here.

Install eAccelerator On Debian Linux

After trying eAccelerator and finding out how great and simple it is, I decided to write a quick guide to show you how to install eAccelerator for PHP. If you are unsure on what eAccelerator is, you can view my post describing what it does and how it can drastically improve your website page generation speed.

Step 1 – Pre-requisites

Now to begin installing eAccelerator for php, make sure you have php4 or php5 installed along with autoconf, automake, libtool and m4. Running the below command appeared to installs these programs for me without any issues but ymmv.

apt-get install libtool m4 php5-dev make

If you get the error phpize command not found then make sure you installed php5-dev. It will also install automake and autoconf which are all required to install eAccelerator.

Step 2 – Get the latest version of eAccelerator

Download the latest version from the offical eAccelerator website and extract the contents to a folder such as your home directory and then CD to the extracted folder.

Step 3 – Building and install eAccelerator

Next step is to Install eAccelerator On Debian Linux. In order to do so, run the following commands commands. If you get any errors such as command not found, then ensure you have followed step 1

phpize
./configure
make

Pay attention to any output to make sure there are no errors before running the command:

make install

Step 4 – Edit your php.ini

Add the following lines to your php.ini file. Your php.ini is usually under /etc/php5/apache2/php.ini. You can run the php command “” to see where your php.ini file is located.

extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

Step 5 – Create the cache directory and restart apache2

Create the cache directories. This is were your compiled scripts will be held. My apache user is www-data so replace www-data with the user your apache is run under.

mkdir /tmp/eaccelerator
chown www-data.www-data /tmp/eaccelerator
chmod 0744 /tmp/eaccelerator
apache2ctl graceful

Step 6 – Check the installation

Check to make sure eAccelerator is installed and running by executing the php function “” and scroll down to the modules section and look for eAccelerator.