Remove directory and all its content in PHP

To recursively delete all the contents in the directory and then the directory itself. This function checks for files and sub directories and delete them first before deleting the main folder.

$directory      = "uploads";
 
if(is_dir($directory)){
	recursiveRemoveDirectory($directory);
}
 
function recursiveRemoveDirectory($directory) {
    foreach(glob("{$directory}/*") as $file) {
        if(is_dir($file)) {
            recursiveRemoveDirectory($file);
        } else {
            unlink($file);
        }
    }
    rmdir($directory);
}

Remove index.php from URL in Codeigniter

Open applications/config/config.php and make the following changes :

Replace

$config['index_page'] = 'index.php';

With

$config['index_page'] = '';

And add the following code to a new file and save it as .htaccess inside the root folder :

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

Unzip a Zip File in PHP

Here is the code to unzip a Zip file using php and store it to another location.

<?php
function unzip($location,$newLocation) {
	if(exec("unzip ".$location, $arr)) {
		mkdir($newLocation);
		for($i = 1; $i< count($arr); $i++){
			$file = trim(preg_replace("~inflating: ~","",$arr[$i]));
			copy($location.'/'.$file, $newLocation.'/'.$file);
			unlink($location.'/'.$file);
		}
		return TRUE;
	} else {
		return FALSE;
	}
}

if( unzip('zipedfiles/test.zip', 'unziped/myNewZip') ) {
	echo 'Success!';
} else {
	echo 'Error';
}
?>

Get Country By IP Address in PHP

How to Get Country By IP Address in PHP ?

Here is the simple solution to that.

<?php
function getLocationInfoByIp(){
	$client = @$_SERVER['HTTP_CLIENT_IP'];
	$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
	$remote = @$_SERVER['REMOTE_ADDR'];
	$result = array('country'=>'', 'city'=>'');
	if(filter_var($client, FILTER_VALIDATE_IP)){
		$ip = $client;
	}elseif(filter_var($forward, FILTER_VALIDATE_IP)){
		$ip = $forward;
	}else{
		$ip = $remote;
	}
	$ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip));
	if($ip_data && $ip_data->geoplugin_countryName != null) {
		$result['country'] = $ip_data->geoplugin_countryCode;
		$result['city'] = $ip_data->geoplugin_city;
	}
	return $result;
}
$result = getLocationInfoByIp();

echo $result['country']." -> ".$result['city'];
?>

Output is

IN -> Ghaziabad

Detecting Device Type in a web application: Mobile, Tablet or Desktop

To check whether the request is coming from mobile, tablet or desktop.

function detectDevice() {
	$tablet_browser = 0;
	$mobile_browser = 0;
	
	if (preg_match('/(tablet|ipad|playbook)|(android(?!.*(mobi|opera mini)))/i', strtolower($_SERVER['HTTP_USER_AGENT']))) {
		$tablet_browser++;
	}
	
	if (preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|android|iemobile)/i', strtolower($_SERVER['HTTP_USER_AGENT']))) {
		$mobile_browser++;
	}
	
	if ((strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml') > 0) or ((isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE'])))) {
		$mobile_browser++;
	}
	
	$mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'], 0, 4));
	$mobile_agents = array(
		'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
		'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
		'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
		'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
		'newt','noki','palm','pana','pant','phil','play','port','prox',
		'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
		'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
		'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
		'wapr','webc','winw','winw','xda ','xda-');
	 
	if (in_array($mobile_ua,$mobile_agents)) {
		$mobile_browser++;
	}

	if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'opera mini') > 0) {
		$mobile_browser++;
		//Check for tablets on opera mini alternative headers
		$stock_ua = strtolower(isset($_SERVER['HTTP_X_OPERAMINI_PHONE_UA']) ? $_SERVER['HTTP_X_OPERAMINI_PHONE_UA'] : (isset($_SERVER['HTTP_DEVICE_STOCK_UA']) ? $_SERVER['HTTP_DEVICE_STOCK_UA'] : ''));
		if (preg_match('/(tablet|ipad|playbook)|(android(?!.*mobile))/i', $stock_ua)) {
			$tablet_browser++;
		}
	}
	 
	if ($tablet_browser > 0) {
	   $device = 'tablet';
	} else if ($mobile_browser > 0) {
	   $device = 'mobile';
	} else {
	   $device = 'desktop';
	}
	return $device;
}

Now call this function wherever you need it.

echo detectDevice();