Protecting your PHP Source Code with Ioncube Encoder

The ionCube Standalone PHP Encoder is the leading script protection solution for PHP 4, PHP 5 and PHP 5.3 based software.

IonCube protection uses 100% compiled PHP, and utilizing a closed source execution engine, ionCube Encoding tools deliver the best performance and PHP source code protection of any encryptor solution currently available. With features to meet the demands of both small and enterprise scale applications, the ionCube Encoder’s unrivaled PHP protection, performance, and all round flexibility and feature set, is the ideal and only serious no-compromise solution for protecting PHP.

As PHP is encoded into a special byte-code, a loader must be installed on your web server. A loader is a PHP module that must be installed. Before we proceed, let’s take a quick look at an encoded file. Listing 1 shows a basic PHP script.

                               helloworld.php

<?php

echo "Hello, world!\n";

?>

We can then run this script through the encoder. While there are many different options available, encoding a script with the default options yields the following PHP file.

helloworld-enc.php

<?php //000a8

echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.

basename($__ln).' to be installed by the site administrator.');exit(199);

?>

4+oV5BgRgd22U2z7JoK/KmKPIcszhD8pg3hvN+5vc4HFcsGMn/El/4CMYaLFFzaqguLCeb9su8xn

i0+eWxJg/kwNHRkiBvY1aMf1AvwPf14DIwCvegtJC7cbx9cN5jBjwSspVjhVsQnxFx9oBut6R0Kc

V+OLw6XBTNm5sKpbL6DVm2jqk8Wasm9oJgKLZxBtvVBeP5vZrOiod+L7SoplcmTgtyr5wzS3sEzj

r7ixXPUY4H82MyuzZyjYTkSKkz9qlMzWHddrUHJX3y0zPfDqWDUeD1BibJQJ9BXkP7jb4pdKQv/hsMqhthNQQRSp6nOJHq8oDDYLE+p403GYs2As9qEI2wNAg6j6ln0BRP7shcbNTb5a8O4VjjLhGDwG

1AYOxaM4R5QneCFr+xYdtEYSep8FW1i9IBzF1FuDa7eMoPDqaQdjTLAPsy5O831yGpAHohx3FzUK

aewZTV+tdru=

 

While you cannot understand what this code does just by looking at it, your PHP installation with the correct loader installed interprets this just as if it was the code in Listing 1.

Encoding your PHP files

The ionCube PHP Encoder is a command-line script you run either one or more files, or on an entire set of folders. If you’re encoding an entire PHP application you would typically run it on the original source folder. The encoder will duplicate the entire tree, except the PHP code will be encoded.

Now let us use the command to generate this encoded script  as shown in Listing 3.

listing-3.txt

/usr/local/ioncube/ioncube_encoder5 helloworld.php -o helloworld-enc.php

In this example, the -o specified the output location. In this example we just created the encoded file in the same directory with a different filename. Typically you would want to create the file with the same filename as the original (without replacing the original source code).To achieve this, set the input and output both to be a directory. The encoder will automatically recurse through all directories in the input directory and encode all PHP files. To demonstrate this, let’s assume helloworld.php is in a directory called src. Listing 4 shows the command we use to encode this entire path. The example outputs the encoded files to the build directory.

listing-4.txt

/usr/local/ioncube/ioncube_encoder5 src -o build

We now have a directory called build which is identical to src except that the PHP files are encoded. There are many other command-line options. You can discover some of these by running ioncube_encoder5 with no arguments. Additionally, the “Encoder User Guide API” document is extremely useful.

 

 

Protecting Non-PHP Code

Depending on how your web application has been designed, there may be some non-PHP files you would to prevent users from being able to read. A good example of such files is XML files or Smarty template files. The ionCube PHP Encoder includes an encryption option. This feature is used to protect non-PHP files (but it differs from the PHP encoding since the output isn’t a bytecode format format).

To encrypt files, the –encrypt command-line option is used. You can then specify a file pattern that will be encrypted. For example, if you want to encrypt every file with extension tpl you would specify –encrypt “*.tpl”. Without doing so, the encoder would simply copy all tpl files exactly as-is into the target directory.

Listing 5 shows the command we can now type on our src directory. The directory contains the helloworld.php script and a template called index.tpl.

listing-5.txt

/usr/local/ioncube/ioncube_encoder5 src/ -o build –encrypt “*.tpl”

Listing 6 shows the original template file:

{foreach from=$myArr item=row}

{$row}

{/foreach}

Now when we run the command from Listing 5, not only is the PHP script encoded, the index.tpl file is encrypted. Listing 7 shows what the encrypted file may look like.

index.tpl

!odMbo!

oGkVHCn70iD3x0iNno6StW4000000000pkStDhZrw5wtaVwr8YByvTkxU/tMRAa8JBW2sOPu5OTW

Yk1KK+DyvUiMDXg2Wasd9IU12Kno0p0HeaPHg8258DO=1

Your application must be able to handle these encrypted files. Fortunately, when a loader is present in a PHP installation, a number of additional functions are made available that allow you to deal with encrypted files.

The ioncube_read_file() will decrypt files that have been previously encrypted. This function accepts a file system path as its only argument and will return the decrypted data. If the input path was not encrypted it will be returned as-is.

Note: The ioncube_read_file() method will only work from within an encoded PHP file. Additionally, it can only decrypt files that were encrypted with the same encoder that encoded the PHP file. This prevents other people from being able to decrypt your files.

Since we encrypted a Smarty template in the previous example, let’s take a quick look at the changes required to Smarty to read encrypted files. The ionCube website contains notes on patching Smarty so it is compatible. This change ensures ioncube_read_file() is available, meaning you can used the patched version in applications whether or not they’re encoded. The API also includes a ioncube_write_file() function which allows you to directly write encrypted data from within your application. This allows you to protect data generated by your application.

How to Store Images in MYSQL

Storing Images in MYSQL

This is the article about the way of storing images in mysql database using the blob column type in mysql. When dealing with a large amount of images, it is often useful to store them in a database. This makes accessing and changing the pictures easy and streamlined, even when you need to change more than one at once. One common task performed on stored images is to resize the image. Uploading and resizing an image using PHP and MySQL can be very simple, and it allows you to do many things, like create a batch of thumbnails for your image gallery, or just display a given image in a size other than the original.

To begin, let us discuss about blob data type. It is a Binary Large Object. In short, a blob is a field type for storing Binary Data. Images are made up of binary data. This data cannot be stored in normal text fields in MySQL (such as text or varchar). Instead, we must use the blob type. MYSQL has four types of blobs:

  1. tinyblob: about 256B
  • blob: about 65KB
  • mediumblob: about 16MB
  • longblob: about 4GB

The actual type you choose doesn’t really matter, since it only stores as much data as you need. Therefore I’d recommend using the longblob type. It’s better to be prepared for files larger than 16MB than having to change the column later.

Creating a Database Table

To begin with storing images in MySQL, let’s create a database table. For the purposes of this article, I’ll assume you already have a database set up with the following details:

Server address: localhost

Database name: phpfresher_demo

Database username: phpfresher_demo

Database password: phpfresher3

The following listing shows how you can create this database on your server.

Creating a database and a database user (listing-1.txt)

mysql> create database phpfresher_demo;

Query OK, 1 row affected (0.00 sec)

mysql> grant all on phpfresher_demo.* to phpfresher_demo@localhost identified by 'phpfresher123';

Query OK, 0 rows affected (0.00 sec)

mysql> use phpfresher_demo;

Database changed

Let’s now create the database table. In addition to storing the file data, we are also going to the store following:

  • A unique ID for the image. We’ll use the serial type for this (this is a shortcut for bigint unsigned auto_increment).
  • The original filename of the image. We’ll use varchar(255) for this, meaning we can easily index the table by the filename if we wanted to.
  • The file mime type. We’re allowing users to upload images, which might be in jpg, png or gif format. We use the mime type when sending the image back to users. We could determine the mime type when required, but this is never going to change for a file so we might as well save some future processing power by determining it when the database record is created.
  • The size of the file. When we send the image back to the user we want to use this value to tell the user’s browser how big the image is. Since this value won’t change, we can simply store it when we insert the image into the database.

 

The statement used to create the table is shown in the following listing.

 

Creating a database table in which to store images (listing-2.sql)

create table images (

image_id    serial,

filename    varchar(255) not null,

mime_type   varchar(255) not null,

file_size   int          not null,

file_data   longblob     not null,

primary key (image_id),

index (filename)

);

Connecting to the Database

Let’s now look at some PHP code to connect to the database. We’re going to include this in a global PHP script that we’ll include from other scripts. In this code, we first try and connect to the database server. Once that connection is made we try and select our database. If either of these steps fails we output an error message and exit.

listing-3:Connecting to the database (globals.php)

<?php

$db = mysql_connect('localhost', 'phpfresher_demo', 'phpfresher123');

if (!$db) {

echo "Unable to establish connection to database server";

exit;

}

if (!mysql_select_db('phpfresher_demo', $db)) {

echo "Unable to connect to database";

exit;

}

?>

The Upload Form

Now that we’ve created a database table to store images and written code to connect to the database, let’s create an upload form so users can upload images. In order to accept uploaded files from a form, you must add the enctype attribute to the HTML <form> tag. The value of this attribute must be multipart/form-data, which indicates that binary data will be uploaded.

Including this attribute means the PHP superglobal $_FILES will be populated with information about the uploaded file. We’ll look at this more closely soon. In this example, the upload form will be stored in a file called upload.php. It will post its values to a file called process.php.

listing-4:The image upload form (upload.php)

<?php

require_once('globals.php');

?>

<html>

<head>

<title>Upload an Image</title>

</head>

<body>

<div>

<h1>Upload an Image</h1>

<p>

<a href="./">View uploaded images</a>

</p>

<form method="post" action="process.php" enctype="multipart/form-data”>

<div>

<input type="file" name="image" />

<input type="submit" value="Upload Image" />

</div>

</form>

</div>

</body>

</html>

It is important to use the enctype=”multipart/form-data” so that the browser uploads the binarydata correctly.

Handling the File Upload

Now that users can select a file and upload it, we must implement the form processor. We will do this in the process.php script that the upload form points to. The details of the uploaded file are stored in the $_FILES superglobal. One of the fields included in the upload data is an error code. This helps you determined if the file was successfully uploaded.

The following listing shows a function we can use to check that a file was successfully uploaded based on its error. If the file was not successfully uploaded an exception is thrown with a relevant error message. If successful, nothing happens.

Asserting a file upload was successful (listing-5.php)

<?php

function assertValidUpload($code)

{

if ($code == UPLOAD_ERR_OK) {

return;

}

switch ($code) {

case UPLOAD_ERR_INI_SIZE:

case UPLOAD_ERR_FORM_SIZE:

$msg = 'Image is too large';

break;

case UPLOAD_ERR_PARTIAL:

$msg = 'Image was only partially uploaded';

break;

case UPLOAD_ERR_NO_FILE:

$msg = 'No image was uploaded';

break;

case UPLOAD_ERR_NO_TMP_DIR:

$msg = 'Upload folder not found';

break;

case UPLOAD_ERR_CANT_WRITE:

$msg = 'Unable to write uploaded file';

break;

case UPLOAD_ERR_EXTENSION:

$msg = 'Upload failed due to extension';

break;

default:

$msg = 'Unknown error';

}

throw new Exception($msg);

}

?>

Once we know the upload was successful, we must perform some other validation on the upload. We are checking the following things:

 

Ensuring the file saved on the server was in fact from a PHP upload and not tampered with on the server. This is done using is_uploaded_file().Ensuring the uploaded file is an image. We can use the getImageSize() function to determine this. To make checking of all of these conditions simpler, we wrap the validation in try/catch block. We can then handle the exception to retrieve any error messages.

The following listing shows how we validate the uploaded file. This includes firstly ensuring the upload data is in $_FILES, then making use of the assertValidUpload() function.

Validating the uploaded file (listing-6.php)

<?php

$errors = array();

try {

if (!array_key_exists('image', $_FILES)) {

throw new Exception('Image not found in uploaded data');

}

$image = $_FILES['image'];

// ensure the file was successfully uploaded

assertValidUpload($image['error']);

if (!is_uploaded_file($image['tmp_name'])) {

throw new Exception('File is not an uploaded file');

}

$info = getImageSize($image['tmp_name']);

if (!$info) {

throw new Exception('File is not an image');

}

}

catch (Exception $ex) {

$errors[] = $ex->getMessage();

}

?>

Once we know the uploaded file is valid we can insert it into the database. The following listing shows the entire upload.php script. When validating the upload we used the getImageSize() function. This is useful not only to determine if a file is an image, but also what kind of image it is. We use the returned mime value to fill the mime_type column in the database.

listing-7:The full upload script (process.php)

<?php

require_once('globals.php');

function assertValidUpload($code)

{

if ($code == UPLOAD_ERR_OK) {

return;

}

switch ($code) {

case UPLOAD_ERR_INI_SIZE:

case UPLOAD_ERR_FORM_SIZE:

$msg = 'Image is too large';

break;

case UPLOAD_ERR_PARTIAL:

$msg = 'Image was only partially uploaded';

break;

case UPLOAD_ERR_NO_FILE:

$msg = 'No image was uploaded';

break;

case UPLOAD_ERR_NO_TMP_DIR:

$msg = 'Upload folder not found';

break;

case UPLOAD_ERR_CANT_WRITE:

$msg = 'Unable to write uploaded file';

break;

case UPLOAD_ERR_EXTENSION:

$msg = 'Upload failed due to extension';

break;

default:

$msg = 'Unknown error';

}

throw new Exception($msg);

}

$errors = array();

try {

if (!array_key_exists('image', $_FILES)) {

throw new Exception('Image not found in uploaded data');

}

$image = $_FILES['image'];

// ensure the file was successfully uploaded

assertValidUpload($image['error']);

if (!is_uploaded_file($image['tmp_name'])) {

throw new Exception('File is not an uploaded file');

}

$info = getImageSize($image['tmp_name']);

if (!$info) {

throw new Exception('File is not an image');

}

}

catch (Exception $ex) {

$errors[] = $ex->getMessage();

}

if (count($errors) == 0) {

// no errors, so insert the image

$query = sprintf(

"insert into images (filename, mime_type, file_size, file_data)

values ('%s', '%s', %d, '%s')",

mysql_real_escape_string($image['name']),

mysql_real_escape_string($info['mime']),

$image['size'],

mysql_real_escape_string(

file_get_contents($image['tmp_name'])

)

);

mysql_query($query, $db);

$id = (int) mysql_insert_id($db);

// finally, redirect the user to view the new image

header('Location: view.php?id=' . $id);

exit;

}

?>

<html>

<head>

<title>Error</title>

</head>

<body>

<div>

<p>

The following errors occurred:

</p>

<ul>

<?php foreach ($errors as $error) { ?>

<li>

<?php echo htmlSpecialChars($error) ?>

</li>

<?php } ?>

</ul>

<p>

<a href="upload.php">Try again</a>

</p>

</div>

</body>

</html>

If the upload is successful we redirect the user to the view.php script. We’ll implement this script shortly. We pass the ID stored in the database of the newly uploaded image. We retrieve this using the mysql_insert_id() method. If the upload is not successful, the reason for the failure is displayed and the user can go back and try another upload.

Sending an Image

After an image is uploaded the user is shown that image. This is achieved using the view.php script that the user is redirected to after uploaded their image. We’ll also redirect to this script from the image listing we’ll implement in the next section.To implement this script we need to read in the ID that is passed to the script in the id URL parameter. We then try to load the image from the database based on the given ID.

If an image cannot be found for the given ID (or if the ID isn’t included) we send a 404 File Not Found error.If the image is found we can output it to user. We must send various headers so the user’s browser can understand the response. The only mandatory header is the Content-type header. This tells the browser to expect an image. The value we send with this is stored in the mime_type column in our database.

We also send the Content-length header. This tells the browser how big the file is. This is especially useful for extremely large files, as it allows the browser to tell the user how long the file will take to download.

listing-8:Downloading an image stored in the database (view.php)

<?php

require_once('globals.php');

try {

if (!isset($_GET['id'])) {

throw new Exception('ID not specified');

}

$id = (int) $_GET['id'];

if ($id <= 0) {

throw new Exception('Invalid ID specified');

}

$query  = sprintf('select * from images where image_id = %d', $id);

$result = mysql_query($query, $db);

if (mysql_num_rows($result) == 0) {

throw new Exception('Image with specified ID not found');

}

$image = mysql_fetch_array($result);

}

catch (Exception $ex) {

header('HTTP/1.0 404 Not Found');

exit;

}

header('Content-type: ' . $image['mime_type']);

header('Content-length: ' . $image['file_size']);

echo $image['file_data'];

?>

Outputting list of Images

The final step is to list to output a list of all files that have been uploaded. We can do this by performing a select on the table, then looping over the returned files. It is important to specify which fields you want to retrieve from the table, since if you select all (using *) it will result in the file data of every single image being returned. This may bog down your server significantly.

In the following code, we retrieve a list of image IDs and corresponding filenames (for display purposes) and build an array that we can easily loop over. This code also checks if there are no images and displays a corresponding message accordingly.

listing-9: Displaying a list of uploaded images (index.php)

<?php

require_once('globals.php');

$query = sprintf('select image_id, filename from images');

$result = mysql_query($query, $db);

$images = array();

while ($row = mysql_fetch_array($result)) {

$id = $row['image_id'];

$images[$id] = $row['filename'];

}

?>

<html>

<head>

<title>Uploaded Images</title>

</head>

<body>

<div>

<h1>Uploaded Images</h1>

<p>

<a href="upload.php">Upload an image</a>

</p>

<ul>

<?php if (count($images) == 0) { ?>

<li>No uploaded images found</li>

<?php } else foreach ($images as $id => $filename) { ?>

<li>

<a href="view.php?id=<?php echo $id ?>">

<?php echo htmlSpecialChars($filename)  ?>

</a>

</li>

<?php } ?>

</ul>

</body>

</html>

Conclusion

This article covered the uploading of images in PHP and inserting them into a BLOB field in MySQL.

File Version Management in PHP

This article is written on the basic concept of uploading and managing files. File uploading is the process of copying the file from your machine to the remote server. Other users of the same system then share this file by viewing or downloading it. While discussing this problem, various other issues arise, such as:

  • Should the program allow the user to restore this file or retain the existing file?
  • If the file exists, then should I copy the file as a new version?
  • How do I manage files, if the user uploads files of same name and type for more than once?

This article gives you a solution for all the above problems. This article is developed with the following versions:

Apache - 1.3.23

MySQL - 3.23.48

PHP - 4.1.1

Operating System: Windows Professional

When a user uploads a file for the first time, the system should upload the file in the specified folder and insert the file details like file name, size, and type in the database table. When the user uploads a file for the second time (the filename has to be the same), the system will compare the size, date and time of existing file and file being uploaded, and automatically assign a new version for the uploaded file if there is a difference. If there is no difference, then the existing file will be retained and a message will be displayed for the user.

A check box allows the user to replace the existing file. Clicking this option will replace the existing file. Note that only the latest version of the file can be replaced in this case, not the older one. The database will maintain file list and version details. User should be able to view all the versions of a file and download the required version. While displaying the file list, the program displays all the versions of file under one name. For example, if the file name is abc.doc and its other versions are abc_VERSION1.doc,abc_VERSION2.doc,abc_VERSION3.doc, and so on.  The program will display filename as abc.doc for all the versions. The program allows user to delete the file. Clicking on delete will ask for confirmation before proceeding.

The file manager program is designed to upload and manage files. The files are stored in a predefined folder. There are two files:  file_upload_manager.php and file_display_manager.php, which performs the file operations. The former handles the file uploading and the later displays the file in the folder and also lets the user to delete the file. The source code is tested on Windows systems. Linux users, please change the folder path accordingly.

Database Design

Database name: upload

CREATE TABLE file_manager (

file_id mediumint(9) NOT NULL auto_increment,

file_name varchar(50) default NULL,

file_type varchar(20) NOT NULL default '',

file_size varchar(20) NOT NULL default '',

file_modified varchar(20) NOT NULL default '',

file_parent_id mediumint(9) default NULL,

file_image_name varchar(50) default NULL,

PRIMARY KEY  (file_id),

KEY file_name (file_name),

KEY file_image_name (file_image_name)

) TYPE=MyISAM;

File Upload Manager

This program displays a menu to select the file in your system, a check box, and Upload button. Once when the user clicks the upload button, the program checks the file for existence, and undergoes series of tests.

$dir_path Variable

This variable is the destination folder path.

$dir_path= "C:\\apache\\htdocs\\filemanager\\";

This path is given for a Windows based system. Please change your destination folder accordingly.

Get_New_File_Name() Function

This function is called from the main program when the program encounters file exists and difference in size, date or time. This function will generate a new file name and return to the main function.

<?php

function Get_New_File_Name($file_name)

{

$sqlQuery="SELECT  file_image_name

FROM file_manager

WHERE  file_name LIKE '$file_name%'

AND  file_parent_id=1";

$fResult=mysql_query($sqlQuery);

$Last_Version=0;

$ver=0;

if(mysql_num_rows($fResult)){

while($fRow=mysql_fetch_array($fResult)){

list($junk,$ver)=explode("_VERSION",$fRow['file_image_name']);

list($ver,$extn)=explode(".",$ver);

$Last_Version = $Last_Version > $ver ? $Last_Version : $ver;

}

}else{

$new_file_name =$file_name."_VERSION".++$Last_Version;

return $new_file_name;

}

if($Last_Version !=0){

$new_file_name=$file_name."_VERSION".++$Last_Version;

return $new_file_name;

}

}

?>

The sql query in the beginning of the function will fetch the file names of previous versions. If the sql query returns record sets, it means the file has previous versions. The while loop is executed to store version number generated, and the value obtained is stored in $Last_Version. Otherwise the new file name will be generated as file-name_VERSION1.

Next, if statement checks for $Last_Version != 0, if true, $Last_Version is incremented by 1 and new file name is assigned. The return statement will return a new file name generated to the called statement.

File_Size() Function

This function returns the file size in terms of Bytes, Kb or Mb.

<?php

function File_Size($size)

{

if($size > 104876){

return $return_size=sprintf("%01.2f",$size / 104876)." Mb";

} elseif($size > 1024){

return $return_size=sprintf("%01.2f",$size / 1024)." Kb";

} else {

return $return_size=$size." Bytes";

}

}

?>

Display_form() Function

This function is used to prompt the user to select the file from your local machine.

<?php

function display_form($errMsg){

global $dir_path;

?>
<html>

<head><title>File Manager</title></head>

<body bgcolor="#E5E5E5">

<div align="center">

<h4>File Manager</h4>

<?php

if($errMsg){

?>

<font face="verdana, helvetica" size="2" color="red"><?php echo $errMsg ?></font>

<?php

}

?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="POST">

<table border="1">

<tr>

<th>File Location:</th>

<th><input type="file" name="up_file" /></th>

</tr>

<tr>

<th colspan="2"><br><input type="checkbox" name="replace" value="1">Replace Exiting File*</th>

</tr>

<tr>

<th colspan="2"><br><input type="submit" name="upload" value="Upload File !" /></th>

</tr>

</table>

<br><font face="verdana, helvetica" size="1" color="#808080">* - Clicking this option will replace the existing file</font>

<br><font face="verdana, helvetica" size="1" color="#808080"><a href="file_display_manager.php">File Manager</a></font>

<br><font face="verdana, helvetica" size="2" color="#4A4A4A"><? if ($status){ echo "Result :".$status; }?></font>

<p><br><font face="verdana, helvetica" size="2" color="#808080"><b>Folder Location:</b><? echo $dir_path ?></font>

<br><font face="verdana, helvetica" size="1" color="#808080">You can change this location by editing the file</font>

</form>

</div>

</body>

</html>

<?php

}

?>

Once the user selects the file and clicks upload, the main program part is executed. Here the program gets the upload file information like file size, file type, date modified and time stamp. Next, it checks for the file existence in the destination folder. If the file is present the “if” part of the program gets executed, otherwise the file is copied to the destination folder and the file information is inserted in the database. If the file exists, and if the file size and/or time stamp differs, Get_New_File_Name() function is called to generate a new file name. Then the file is copied to the destination folder and the file information is stored in the database.

If the file exists and the user had checked the “Replace Existing File” option, the file is replaced and the file information is updated in the database accordingly. Otherwise, the user is redirected to the file_display_manager.php page and the message “A previous version of this file exists” is displayed.

Top Sites to Check the Price of your Website

Know your price of your website..

While you are developing any product , may be it is application , website  or blog you always want to know the worth value of your website. And you always think of where will I find the evaluation tool of my website. Actually , if your are familiar with the google analytics or if you have any mechanism to find out the daily unique visitor of your website you can estimate the worth of your website. If keep in mind , only incoming visitor to your site donot give the actual data , there are other factors like how they react to your blog or site , will they return  bla bla bla…

I have made some collection of website to know the worth value of your website i.e. with the help of these sites you will approximately know the price of your website.

Some collection of website to check the price of your website:

  1. http://www.websiteoutlook.com/
  2. http://sitevaluecheck.com/
  3. http://www.sitevaluecalculator.com/
  4. http://www.yourwebsitevalue.com/
  5. http://stimator.com/
  6. http://mysiteevaluate.com
  7. http://websiteworthcheckr.com
  8. http://websitevaluecheck.com
  9. http://bizinformation.com
  10. http://cubestat.com

 

Open the Websites , check the  worth of your website and Enjoy

Top Website to Evaluate your SEO, SPEED of website

How I started my blog?

It was my fresh start in PHP and at that time I used to develop  websites that were too messy , frankly speaking I was not satisfied with what I was developing . The most common reason lack of experience , not matured enough , programmatically not strong and about the design , ha ha I used to download the fee templates.

Then I started learning things from different websites. Suddenly , I though t shouldnot I start giving things to other that I have learnt . Then I start sharing my learning the things that I learnt through my first blog www.phpfresher.com

Build Blog was not only the solution ????????????

I build the blog ,It was my fresh blog with fresh knowledge where some contents were genuine and some contents copied ditoo (really) and some compiled version. Ok where I stuck .

This was my some stastitics :

Daily unique visitor: around 30 , which was really pity

PR:  0 ( at the start now 2)

This showed that I have no readers , if I don’t have readers than what was I blogging but I did not stop writing blogs.

The only solution that I found after a long study is :

  1. Quality Contents
  2. Quality Seo
  3. Contents in need

Ok lets come to the point, today here I want tell all the bloggers , content writer  that writing and blogging  is not the solution to convey your writing to the readers .But you need to evaluate your site frequently. But keep in mind quality content is the most.

Collection of Websites to Evaluate your Website for site promotion and Update:

  1. http://www.woorank.com
  2. http://www.getmysite.info
  3. http://www.alexa.com
  4.  http://www.prchecker.info/check_page_rank.php
  5. http://www.prchecker.info/
  6. http://www.seocentro.com/tools/search-engines/keyword-position.html
  7. http://www.iwebtool.com/rank
  8. http://www.seomoz.org/blog/how-to-check-which-links-can-harm-your-sites-rankings
  9. https://positionly.com/
  10. https://www.google.com/analytics/

Among the above sites , google analytics and alexa.com  is the always the best apart from it , I prefer the woorank.com and getmysite.info I prefer the best because they give the detail view of your website from where you can update your website.

 Some Website that will help to Check the Speed of your website, i.e. how fast your website will open:

  1. http://www.iwebtool.com/speed_test
  2. http://tools.pingdom.com/fpt/
  3. http://rapid.searchmetrics.com/en/seo-tools/site-analysis/website-speed-test,46.html
  4. http://www.websiteoptimization.com/services/analyze/
  5. http://gtmetrix.com/
  6. http://loadimpact.com/
  7. http://site-perf.com/
  8. https://developers.google.com/speed/pagespeed/insights
  9. http://www.webtoolhub.com/tn561353-website-speed-test.aspx
  10. http://www.vertain.com/?sst

Open the website and Check speed of your website , and make the changes . Most referred by me  google and tools.pingdom.com/fpt/