PHP是一种HTML内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言。PHP拥有数以百计的基本功能,支持上千种扩展。这些功能都被很好的加载在PHP站点上,但内置的库有各种各样的命名。在PHP代码库中包含了无数个有用的PHP代码片段,每位开发者都需要不断完善自己的“工具箱”。有了这些代码片段可以为你节省大量的时间,一起来看下。


1.查找Longitudes与Latitudes之间的距离

<?php
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).’
‘;
}

/*
The example returns the following:

miles: 2.6025
feet: 13,741.4350
yards: 4,580.4783
kilometers: 4.1884
meters: 4,188.3894
*/
?>

2、完善CURL功能

<?php
function xcurl($url,$ref=null,$post=array(),$ua=”Mozilla/5.0 (X11; Linux x86_64; rv:2.2a1pre) Gecko/20110324 Firefox/4.2a1pre”,$print=false) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
if(!empty($ref)) {
curl_setopt($ch, CURLOPT_REFERER, $ref);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if(!empty($ua)) {
curl_setopt($ch, CURLOPT_USERAGENT, $ua);
}
if(count($post) > 0){
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
$output = curl_exec($ch);
curl_close($ch);
if($print) {
print($output);
} else {
return $output;
}
}
?>

3、清理用户输入

<?php
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;
}
?>
<?php
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;
}
?>

4、通过IP(城市、国家)检测地理位置

<?php
function detect_city($ip) {

$default = ‘Hollywood, CA’;

if (!is_string($ip) || strlen($ip) < 1 || $ip == ‘127.0.0.1’ || $ip == ‘localhost’) $ip = ‘8.8.8.8’; $curlopt_useragent = ‘Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)’; $url = ‘http://ipinfodb.com/ip_locator.php?ip=’ . urlencode($ip); $ch = curl_init(); $curl_opt = array( CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_USERAGENT => $curlopt_useragent,
CURLOPT_URL => $url,
CURLOPT_TIMEOUT => 1,
CURLOPT_REFERER => ‘http://’ . $_SERVER[‘HTTP_HOST’],
);

curl_setopt_array($ch, $curl_opt);

$content = curl_exec($ch);

if (!is_null($curl_info)) {
$curl_info = curl_getinfo($ch);
}

curl_close($ch);

if ( preg_match(‘{City : ([^<]*)}i’, $content, $regs) ) { $city = $regs[1]; } if ( preg_match(‘{State/Province : ([^<]*)}i’, $content, $regs) ) { $state = $regs[1]; } if( $city!=” && $state!=” ){ $location = $city . ‘, ‘ . $state; return $location; }else{ return $default; } }
?>

5.设置密码强度

<?php
function password_strength($string){
$h = 0;
$size = strlen($string);
foreach(count_chars($string, 1) as $v){
$p = $v / $size;
$h -= $p * log($p) / log(2);
}
$strength = ($h / 4) * 100;
if($strength > 100){
$strength = 100;
}
return $strength;
}

var_dump(password_strength(“Correct Horse Battery Staple”));
echo “<br />”;
var_dump(password_strength(“Super Monkey Ball”));
echo “<br />”;
var_dump(password_strength(“Tr0ub4dor&3”));
echo “<br />”;
var_dump(password_strength(“abc123”));
echo “<br />”;
var_dump(password_strength(“sweet”));
?>

6.检测浏览器语言,只提供可用的$availableLanguages作为数组(‘en’, ‘de’, ‘es’)

<?php
function get_client_language($availableLanguages, $default=’en’){

if (isset($_SERVER[‘HTTP_ACCEPT_LANGUAGE’])) {

$langs=explode(‘,’,$_SERVER[‘HTTP_ACCEPT_LANGUAGE’]);

//start going through each one
foreach ($langs as $value){

$choice=substr($value,0,2);
if(in_array($choice, $availableLanguages)){
return $choice;

}

}
}
return $default;
}
?>

7、创建数据URL

<?php
function data_uri($file, $mime) {
$contents=file_get_contents($file);
$base64=base64_encode($contents);
echo “data:$mime;base64,$base64”;
}
?>

8.创建更加友好的页面标题SEO URL

输入示例:$title = “This foo’s bar is rockin’ cool!”; echo makeseoname($title); //RETURNS: //this-foos-bar-is-rockin-cool

<?php
function make_seo_name($title) {
return preg_replace(‘/[^a-z0-9_-]/i’, ”, strtolower(str_replace(‘ ‘, ‘-‘, trim($title))));
}
?>

9.终极加密功能

<?php
// f(ucking) u(ncrackable) e(ncryption) function by BlackHatDBL (www.netforme.net)
function fue($hash,$times) {

// Execute the encryption(s) as many times as the user wants
for($i=$times;$i>0;$i–) {

// Encode with base64…
$hash=base64_encode($hash);

// and md5…
$hash=md5($hash);

// sha1…
$hash=sha1($hash);

// sha256… (one more)
$hash=hash(“sha256”, $hash);

// sha512
$hash=hash(“sha512”, $hash);

}

// Finaly, when done, return the value
return $hash;
}
?>

10.文件上传PHP代码

<?php

echo <<<FORM
<form method=”post” action=”$_SERVER[PHP_SELF]” enctype=”multipart/form-data”>
<input type=”hidden” name=”flag” value=”1″ />
<input type=”file” name=”test” />
<input type=”submit” value=”Upload” /></form>
FORM;

if (isset($_POST[‘flag’]))
{
$result = DOPHP_UploadFile(“test”,
array(“image/jpeg”, “image/pjpeg”), 100000);
if ($result[0] == 0)
{
file_put_contents(“test.jpg”, $result[2]);
echo “文件上传成功!”;
echo “查看图片:<a href=’test.jpg’>test.jpg</a><br />”;
}
else
{
if ($result[0] == -2) echo “错误的文件类型<br />”;
if ($result[0] == -3) echo “文件超出限定大小<br />”;
if ($result[0] > 0) echo “Error code: $result<br />”;
echo “文件上传失败!<br />”;
}
}

function DOPHP_UploadFile($name, $filetypes, $maxlen)
{
/*
插件说明:
插件11接受一个表单域的名称,利用这个表单域把文件上传到web服务器,并返回这个上床文件名,上传成功后,发返回一个两元素的数组,第一个元素的值为0,第二个元素是上传的文件名。上传失败时,返回只有一个元素的数组,这个元素的值科恩那个是一下值之一:
“-1” 代表上传失败;
“-2” 代表文件类型错误;
“-3” 代表文件太大;
“1“ 代表文件大小超过php.ini文件中upload_max_filesize参数规定的大小;
”2“ 代表文件大小出熬过HTML表单中MAX_FILE_SIZE指令规定的最大值;
”3“ 代表文件只部分上传;
”4“ 代表没有文件上传;
”6“ 代表PHP没有临时文件夹;
”7“ 代表无法把上传文件保存到磁盘里;
”8“ 代表由于扩展名的原因,文件的上传被中止。
本插件需要以下参数:
$name 代表表单域中输入的上传文件名。
$filetype 数组,包含了受支持的文件类型(mime).
$maxlen 整数,表示上传文件的最大值。
*/

if (!isset($_FILES[$name][‘name’]))
return array(-1, NULL, NULL);

if (!in_array($_FILES[$name][‘type’], $filetypes))
return array(-2, NULL, NULL);

if ($_FILES[$name][‘size’] > $maxlen)
return array(-3, NULL, NULL);

if ($_FILES[$name][‘error’] > 0)
return array($_FILES[$name][‘error’], NULL, NULL);

$temp = file_get_contents($_FILES[$name][‘tmp_name’]);
return array(0, $_FILES[$name][‘type’], $temp);
}

?>