Thursday, January 24, 2008

The Guru's

This image is posted here coz all these Guru's (Father's) have influenced me in some point of time.

Wednesday, December 19, 2007

PHP filters

Gone are days of writing a validation class for vaildating different user inputs.
Gone are days of writing secure functions for validating URL, email address,etc.
In october 2005, first version of Filter package was released by PECL and within 1 year and 5 more releases PECL released final version 0.11 of Filter pack
age.

You can download filter package from here http://pecl.php.net/package/filter.
All you need is Php5.0 or higher and PEAR installer.
Installation steps are simple just write this in your console
$ pecl install filter

Usage Documentation.
Although filter functions are documented in php.net (http://in.php.net/filter), I find these documentation incomplete.
While doing some googling I found a good link which described different usages of Filter functions in a simple manner.
The Link is : http://phpro.org/tutorials/Filtering-Data-with-PHP.html

I won't provide you with entire usage as it would be a waste of time when I already have good link doing the same for me.
I will only provide a snapshot to show you the power of PHP filters

Filter IP Address

Following on from validation of URLs, we often find we need to validate an IP Address. Of course, and IP address may be of different formats for ipv4 and ipv6. An IP address may also need to be within a range of private or reserved ranges. The filter extension makes it possible to discern these differences and to validate an IP address to fit most needs. In its simplest form the validation of a url will look like this.



/*** an IP address ***/
$ip = "192.168.0.1";

if(
filter_var($ip, FILTER_VALIDATE_IP) === FALSE)
{
echo
"$ip is not a valid IP";
}
else
{
echo
"$ip is valid";
}
?>

As we have supplied the above with a valid IP address it validates and all is well. But now we may wish to validate an IPV6 address or an address with a private range. The IP filter has several flag with which to validate an IP address with. Listed here.

  • FILTER_FLAG_IPV4
  • FILTER_FLAG_IPV6
  • FILTER_FLAG_NO_PRIV_RANGE
  • FILTER_FLAG_NO_RES_RANGE

Starting at the top we will check to see if an IP is a valid IPV4 address.



/*** an IP address ***/
$ip = "192.168.0";

/*** try to validate as IPV4 address ***/
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === FALSE)
{
echo
"$ip is not a valid IP";
}
else
{
echo
"$ip is valid";
}
?>

In the above example the IP address has failed to validate as it is not a complete IPV4 address. It would need to be of the form of the example that preceded it, 192.168.0.1 to validate. This is fine, but growth of the net has seen us run out of IPV4 addresses and so we need to validate against IPV6 addresses also.


Please visit the above link, read carefully and start saving time by using the above

Friday, November 16, 2007

Checking Apache Runtime Status

mod_status provides information on your apache server activity and performance.
This tutorial will show you how to enable this feature in such a way that only requested issued from localhost will be accepted and served.

Setting mod_status up

By default, server status report is commented so you can not access it. To enable it, you need to uncomment from /etc/apache2/apache2.conf or /usr/local/apache/conf/httpd.conf :


SetHandler server-status
Order deny,allow
Deny from all
Allow from .your_domain.com

This is a default setting, and will not work out of the box. What is said here is: server status will be acessible at location http://servername/server-status, access will be denied to everybody but people connecting from domain your_domain.com and any sub-domain from your_domain.com.

We want the server status to be provided only to people connected directly from the host running the apache server. Therefore we are going to deny access to /server-status to everybody except for people connecting from localhost, in the end the setting will look like:


SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1

Note: You could be using localhost instead of 127.0.0.1, but keep in mind that if the directive HostnameLookups is turned to Off, apache won't let you access to http://localhost/server-status .

OK, now that everything is set up, check that there is no error in your configuration by using:

$apache2ctl -t or $ /usr/local/apache/bin/apachectl configtest

if everything is fine, reload apache2 configuration with:

$sudo /etc/init.d/apache2 reload or $ /usr/local/apache/bin/apachectl restart

Accessing Apache Status

To access apache status and activity, you need to request the page http://localhost/server-status, you could use text mode navigators such as elinks or links in order to connect through a console using ssh.

Now, you can access information such as server start time, server uptime, number of requests being processed, number of slots available .... The different keys are explained just under the server activity.
A neat feature of server-status is the ability to refresh every X seconds, in order to get up-to-date activity, by calling:

elinks http://localhost/server-status?refresh=2

In the previous example, the status will be updated every 2 seconds.

Getting more from Apache Server-status

If you want to get more information from your server activity, you can add the directive:

ExtendedStatus On

just above the directive. But keep in mind that this cannot be set on a per virtualhost basis and will use more resources.
But in another hand, you will be able to access more informations such as:
  • Total accesses
  • CPU usage
  • number of requests/sec, Bytes/sec and Bytes/request
  • See the different clients connected to your server, on which virtual host as well as the page there are requesting, you can even access the time it took to request a specific page as well as the resources required.

References : http://www.debuntu.org/apache-activity-performance-mod_status

Thursday, November 15, 2007

Web Developers Link Farm

Recently I found this cool link [ http://www.devlisting.com/ ] which displays all useful links that can be referred during Web Development. Its a resourceful link farm.
Some of the link categories of this farm contains are listed below:
  • Ajax
  • Firefox Plugins
  • Ruby
  • Traffic / SEO
  • Flash
  • Asp.net
  • Design

Go here http://www.devlisting.com/

Friday, October 26, 2007

Steps to Improve Front End

  1. With reference to my last post that Front End Performance are more important than Back End performance I have finally managed to find a nice descriptive article stating how to exactly achieve it.
The below are some of the common steps taken at Yahoo to improve performance of Yahoo Products.
All the points are covered in this link http://developer.yahoo.com/performance/rules.html


  1. The Importance of Front-End Performance
  1. Make Fewer HTTP Requests
  2. Use a Content Delivery Network
  3. Add an Expires Header
  4. Gzip Components
  5. Put Stylesheets at the Top
  6. Put Scripts at the Bottom
  7. Avoid CSS Expressions
  8. Make JavaScript and CSS External
  9. Reduce DNS Lookups
  10. Minify JavaScript
  11. Avoid Redirects
  12. Remove Duplicate Scripts
  13. Configure ETags
  14. Make Ajax Cacheable

In addition to these Yahoo also provides developers with their custom FireFox extension which finds out what components of your page are slow and what can be done for improvement.
download Page :
http://developer.yahoo.com/yslow/
https://addons.mozilla.org/en-US/firefox/addon/5369

Wednesday, October 24, 2007

Reduce your page load time

Ever wondered why your page loads slowly even when your database queries execute at lightning speed.
Ever wondered why Super sites like Yahoo, AOL, etc load faster than your site.

If you are still wondering than this small article and the link mentioned at the bottom may help you reduce your page load time.

In any optimization effort it's critical to profile current performance to identify where the greatest improvement can be made. It's clear that the place to focus for fast web pages is the front end:

1. There is more potential for improvement by focusing on the front end. Making the back-end twice as fast reduces response times by 5-10%, whereas making the front end twice as fast saves 40-45%.
2. Front end improvements typically require less time and resources than back-end performance projects.
3. Focusing on front end improvements has proven to work. Over fifty teams at Yahoo! have reduced their end-user response times by following the best practices described here.

As web applications evolve to contain more functionality and content, these best practices are expected to have an even bigger impact.

Results Php Benchmark tests:
http://www.php.lt/benchmark/phpbench.php

The above link serves only the programming aspect of PHP.
There is still lot of improvement you can do in JavaScript and DOM.
So keep googling you might end up with what you exactly want.

Friday, August 31, 2007

Send Header without error

One of the common errors a web developer often gets is "Headers already sent" error.This happens when we render some text/characters /space in the browser and then try to redirect the page using header function of php.
For long I always thought that header function will only work when there is nothing rendered before the header call.
But recently I discovered(ofcorse with help of google) that we can render anything before the header call and still redirect the page.

Normal Usage with error is


echo "This will give error"
header("location:http://www.yahoo.com");


echo "This will NOT give error";
header("refresh:0; url:http://www.yahoo.com");


Here refresh:0 means the page will load after 0 seconds(which is instantly).
Basically this can be used when we want to have delay the page loading say we want to load yahoo after 2 seconds.
In this case the code will be


header("refresh:2; url:http://www.yahoo.com");




So start using this header call and redirect the page anytime during page execution.