46 個非常有用的 PHP 程式碼片段
阿新 • • 發佈:2019-01-13
http://www.oschina.net/question/2012764_246023?from=20150809
1. 傳送 SMS
在開發 Web 或者移動應用的時候,經常會遇到需要傳送 SMS 給使用者,或者因為登入原因,或者是為了傳送資訊。下面的 PHP 程式碼就實現了傳送 SMS 的功能。
為了使用任何的語言傳送 SMS,需要一個 SMS gateway。大部分的 SMS 會提供一個 API,這裡是使用MSG91 作為 SMS gateway。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
function send_sms( $mobile , $msg )
{
$authKey = "XXXXXXXXXXX" ;
date_default_timezone_set( "Asia/Kolkata" );
$date = strftime ( "%Y-%m-%d %H:%M:%S" );
//Multiple mobiles numbers separated by comma
$mobileNumber = $mobile ;
//Sender ID,While using route4 sender id should be 6 characters long.
$senderId = "IKOONK" ;
//Your message to send, Add URL encoding here.
$message = urlencode( $msg );
//Define route
$route = "template" ;
//Prepare you post parameters
$postData = array (
'authkey' => $authKey ,
'mobiles' => $mobileNumber ,
'message' => $message ,
'sender' => $senderId ,
'route' => $route
);
//API URL
$url = "https://control.msg91.com/sendhttp.php" ;
// init the resource
$ch = curl_init();
curl_setopt_array( $ch , array (
CURLOPT_URL => $url ,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postData
//,CURLOPT_FOLLOWLOCATION => true
));
//Ignore SSL certificate verification
curl_setopt( $ch , CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, 0);
//get response
$output = curl_exec( $ch );
//Print error if any
if (curl_errno( $ch ))
{
echo 'error:' . curl_error( $ch );
}
curl_close( $ch );
}
|
其中“$authKey = "XXXXXXXXXXX";”需要你輸入你的密碼,“$senderId = "IKOONK";”需要你輸入你的 SenderID。當輸入移動號碼的時候需要指定國家程式碼 (比如,美國是 1,印度是 91 )。
語法:
1 2 3 4 5 |
<?php
$message = "Hello World" ;
$mobile = "918112998787" ;
send_sms( $mobile , $message );
?>
|
2. 使用 mandrill 傳送郵件
Mandrill 是一款強大的 SMTP 提供器。開發者傾向於使用一個第三方 SMTP provider 來獲取更好的收件交付。
下面的函式中,你需要把 “Mandrill.php” 放在同一個資料夾,作為 PHP 檔案,這樣就可以使用TA來發送郵件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
function send_email( $to_email , $subject , $message1 )
{
require_once 'Mandrill.php' ;
$apikey = 'XXXXXXXXXX' ; //specify your api key here
$mandrill = new Mandrill( $apikey );
$message = new stdClass();
$message ->html = $message1 ;
$message ->text = $message1 ;
$message ->subject = $subject ;
$message ->from_email = "[email protected]" ; //Sender Email
$message ->from_name = "KOONK" ; //Sender Name
$message ->to = array ( array ( "email" => $to_email ));
$message ->track_opens = true;
$response = $mandrill ->messages->send( $message );
}
|
“$apikey = 'XXXXXXXXXX'; //specify your api key here”這裡需要你指定你的 API 金鑰(從 Mandrill 賬戶中獲得)。
語法:
1 2 3 4 5 6 |
<?php
$to = "[email protected]" ;
$subject = "This is a test email" ;
$message = "Hello World!" ;
send_email( $to , $subject , $message );
?>
|
為了達到最好的效果,最好按照 Mandrill 的教程去配置 DNS。
3. PHP 函式:阻止 SQL 注入
SQL 注入或者 SQLi 常見的攻擊網站的手段,使用下面的程式碼可以幫助你防止這些工具。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
function clean( $input )
{
if ( is_array ( $input ))
{
foreach ( $input as $key => $val )
{
$output [ $key ] = clean( $val );
// $output[$key] = $this->clean($val);
}
}
else
{
$output = (string) $input ;
// if magic quotes is on then use strip slashes
if (get_magic_quotes_gpc())
{
$output = stripslashes ( $output );
}
// $output = strip_tags($output);
$output = htmlentities( $output , ENT_QUOTES, 'UTF-8' );
}
// return the clean text
return $output ;
}
|
語法:
1 2 3 4 5 |
<?php
$text = "<script>alert(1)</script>" ;
$text = clean( $text );
echo $text ;
?>
|
4. 檢測使用者位置
使用下面的函式,可以檢測使用者是在哪個城市訪問你的網站
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
function detect_city( $ip ) {
$default = 'UNKNOWN' ;
$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( '{<li>City : ([^<]*)</li>}i' , $content , $regs ) ) {
$city = $regs [1];
}
if ( preg_match( '{<li>State/Province : ([^<]*)</li>}i' , $content , $regs ) ) {
$state = $regs [1];
}
if ( $city != '' && $state != '' ){
$location = $city . ', ' . $state ;
return $location ;
} else {
return $default ;
}
}
|
語法:
1 2 3 4 5 |
<?php
$ip = $_SERVER [ 'REMOTE_ADDR' ];
$city = detect_city( $ip );
echo $city ;
?>
|
5. 獲取 Web 頁面的原始碼
使用下面的函式,可以獲取任意 Web 頁面的 HTML 程式碼
1 2 3 4 5 6 7 8 9 |
function display_sourcecode( $url )
{
$lines = file( $url );
$output = "" ;
foreach ( $lines as $line_num => $line ) {
// loop thru each line and prepend line numbers
$output .= "Line #<b>{$line_num}</b> : " . htmlspecialchars( $line ) . "<br>\n" ;
}
}
|
語法:
?1 2 3 4 5 |
<?php
$url = "http://blog.koonk.com" ;
$source = display_sourcecode( $url );
echo $source ;
?>
|
6. 計算喜歡你的 Facebook 頁面的使用者
?1 2 3 4 5 6 |
function fb_fan_count( $facebook_name )
{
$data = json_decode( file_get_contents ( "https://graph.facebook.com/" . $facebook_name ));
$likes = $data ->likes;
return $likes ;
}
|
語法:
?1 2 3 4 5 |
<?php
$page = "koonktechnologies" ;
$count = fb_fan_count( $page );
echo $count ;
?>
|
7. 確定任意圖片的主導顏色
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
function dominant_color( $image )
{
$i = imagecreatefromjpeg( $image );
for ( $x =0; $x <imagesx( $i ); $x ++) {
for ( $y =0; $y <imagesy( $i ); $y ++) {
$rgb = imagecolorat( $i , $x , $y );
$r = ( $rgb >> 16) & 0xFF;
$g = ( $rgb >> & 0xFF;
$b = $rgb & 0xFF;
$rTotal += $r ;
$gTotal += $g ;
$bTotal += $b ;
$total ++;
}
}
$rAverage = round ( $rTotal / $total );
$gAverage = round ( $gTotal / $total );
$bAverage = round ( $bTotal / $total );
}
|
8. whois 查詢
使用下面的函式可以獲取任何域名使用者的完整細節
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
function whois_query( $domain ) {
// fix the domain name:
$domain = strtolower (trim( $domain ));
$domain = preg_replace( '/^http:\/\//i' , '' , $domain );
$domain = preg_replace( '/^www\./i' , '' , $domain );
$domain = explode ( '/' , $domain );
$domain = trim( $domain [0]);
// split the TLD from domain name
$_domain = explode ( '.' , $domain );
$lst = count ( $_domain )-1;
$ext = $_domain [ $lst ];
// You find resources and lists
// like these on wikipedia:
//
// http://de.wikipedia.org/wiki/Whois
//
$servers = array (
"biz" => "whois.neulevel.biz" ,
"com" => "whois.internic.net" ,
"us" => "whois.nic.us" ,
"coop" => "whois.nic.coop" ,
"info" => "whois.nic.info" ,
"name" => "whois.nic.name" ,
"net" => "whois.internic.net" ,
"gov" => "whois.nic.gov" ,
"edu" => "whois.internic.net" ,
"mil" => "rs.internic.net" ,
"int" => "whois.iana.org" ,
"ac" => "whois.nic.ac" ,
"ae" => "whois.uaenic.ae" ,
"at" => "whois.ripe.net" ,
"au" => "whois.aunic.net" ,
"be" => "whois.dns.be" ,
"bg" => "whois.ripe.net" ,
"br" => "whois.registro.br" ,
"bz" => "whois.belizenic.bz" ,
"ca" => "whois.cira.ca" ,
"cc" => "whois.nic.cc" ,
"ch" => "whois.nic.ch" ,
"cl" => "whois.nic.cl" ,
"cn" => "whois.cnnic.net.cn" ,
"cz" => "whois.nic.cz" ,
"de" => "whois.nic.de" ,
"fr" => "whois.nic.fr" ,
"hu" => "whois.nic.hu" ,
"ie" => "whois.domainregistry.ie" ,
"il" => "whois.isoc.org.il" ,
"in" => "whois.ncst.ernet.in" ,
"ir" => "whois.nic.ir" ,
"mc" => "whois.ripe.net" ,
"to" => "whois.tonic.to" ,
"tv" => "whois.tv" ,
"ru" => "whois.ripn.net" ,
"org" => "whois.pir.org" ,
"aero" => "whois.information.aero" ,
"nl" => "whois.domain-registry.nl"
);
if (!isset( $servers [ $ext ])){
|