首頁  >  文章  >  後端開發  >  php:總結一些實用的自訂函數

php:總結一些實用的自訂函數

伊谢尔伦
伊谢尔伦原創
2017-06-26 09:48:511744瀏覽

雖然PHP自帶的函數庫很強大,但在日常很多情況下,我們也得自己寫自訂的函數去實現某些功能與需求。下面收集了一些比較實用的、解決一些常見需求的自訂函數,例如將網址字串轉換成超級連結、列出目錄內容、驗證郵件地址等等

#1. PHP可閱讀隨機字串

此程式碼將建立一個可閱讀的字串,使其更接近字典中的單字,實用且具有密碼驗證功能。

function readable_random_string($length = 6){
   $conso=array("b","c","d","f","g","h","j","k","l",
   "m","n","p","r","s","t","v","w","x","y","z");
   $vocal=array("a","e","i","o","u");
   $password="";
   srand ((double)microtime()*1000000);
   $max = $length/2;
   for($i=1; $i<=$max; $i++)
   {
   $password.=$conso[rand(0,19)];
   $password.=$vocal[rand(0,4)];
   }
   return $password;
}

2. PHP產生一個隨機字串

如果不需要可閱讀的字串,使用此函數替代,即可建立一個隨機字串,作為使用者的隨機密碼等。

function generate_rand($l){
 $c= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
 srand((double)microtime()*1000000);
 for($i=0; $i < $l; $i++) {
     $rand.= $c[rand()%strlen($c)];
 }
 return $rand;
}

3. PHP編碼電子郵件地址

使用此程式碼,可以將任何電子郵件地址編碼為 html 字元實體,以防止被垃圾郵件程式收集。

function encode_email($email=&#39;info@domain.com&#39;, $linkText=&#39;Contact Us&#39;, $attrs =&#39;class="emailencoder"&#39; )
 {
     // remplazar aroba y puntos
     $email = str_replace(&#39;@&#39;, &#39;@&#39;, $email);
     $email = str_replace(&#39;.&#39;, &#39;.&#39;, $email);
     $email = str_split($email, 5); 
  
     $linkText = str_replace(&#39;@&#39;, &#39;@&#39;, $linkText);
     $linkText = str_replace(&#39;.&#39;, &#39;.&#39;, $linkText);
     $linkText = str_split($linkText, 5); 
  
     $part1 = &#39;<、a href="ma&#39;;
     $part2 = &#39;ilto:&#39;;
     $part3 = &#39;" &#39;. $attrs .&#39; >&#39;;
     $part4 = &#39;<、/a>&#39;; 
  
     $encoded = &#39;<、script type="text/javascript">&#39;;
     $encoded .= "document.write(&#39;$part1&#39;);";
     $encoded .= "document.write(&#39;$part2&#39;);";
     foreach($email as $e)
     {
             $encoded .= "document.write(&#39;$e&#39;);";
     }
     $encoded .= "document.write(&#39;$part3&#39;);";
     foreach($linkText as $l)
     {
             $encoded .= "document.write(&#39;$l&#39;);";
     }
     $encoded .= "document.write(&#39;$part4&#39;);";
     $encoded .= &#39;<、/script>&#39;; 
  
     return $encoded;
 }

4. PHP驗證郵件地址

電子郵件驗證也許是中最常用的網頁表單驗證,此程式碼除了驗證電子郵件地址,也可以選擇檢查郵件網域所屬DNS 中的MX 記錄,讓郵件驗證功能更強大。

function is_valid_email($email, $test_mx = false)
{
   if(eregi("^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email))
       if($test_mx)
       {
           list($username, $domain) = split("@", $email);
           return getmxrr($domain, $mxrecords);
       }
       else
           return true;
   else
       return false;
}

5. PHP列出目錄內容

function list_files($dir)
{
   if(is_dir($dir))
   {
       if($handle = opendir($dir))
       {
           while(($file = readdir($handle)) !== false)
           {
               if($file != "." && $file != ".." && $file != "Thumbs.db"){                     
               echo &#39;<、a target="_blank" href="&#39;.$dir.$file.&#39;">&#39;.$file.&#39;<、/a><、br>&#39;."\n";                 }
           }
           closedir($handle);
       }
   }
}

6. PHP銷毀目錄

刪除一個目錄,包括它的內容。

function destroyDir($dir, $virtual = false)
{
   $ds = DIRECTORY_SEPARATOR;
   $dir = $virtual ? realpath($dir) : $dir;
   $dir = substr($dir, -1) == $ds ? substr($dir, 0, -1) : $dir;
   if (is_dir($dir) && $handle = opendir($dir))
   {
       while ($file = readdir($handle))
       {
           if ($file == &#39;.&#39; || $file == &#39;..&#39;)
           {
               continue;
           }
           elseif (is_dir($dir.$ds.$file))
           {
               destroyDir($dir.$ds.$file);
           }
           else
           {
               unlink($dir.$ds.$file);
           }
       }
       closedir($handle);
       rmdir($dir);
       return true;
   }
   else
   {
       return false;
   }
}

7. PHP解析JSON 資料

與大多數流行的Web 服務如twitter 透過開放API 來提供資料一樣,它總是能夠知道如何解析API 資料的各種傳送格式,包括JSON,XML 等等。

$json_string=&#39;{"id":1,"name":"foo","email":"foo@foobar.com","interest":["wordpress","php"]} &#39;;
$obj=json_decode($json_string);
echo $obj->name; //prints foo
echo $obj->interest[1]; //prints php

8. PHP解析 XML 資料

//xml string
 $xml_string="
 <、users>
 <、user id=&#39;398&#39;>
 <、name>Foo<、/name>
 <、email>foo@bar.com<、/name>
 <、/user>
 <、user id=&#39;867&#39;>
 <、name>Foobar<、/name>
 <、email>foobar@foo.com<、/name>
 <、/user>
 <、/users>";
  
 //load the xml string using simplexml
 $xml = simplexml_load_string($xml_string);
  
 //loop through the each node of user
 foreach ($xml->user as $user)
 {
     //access attribute
     echo $user[&#39;id&#39;], &#39; &#39;;
     //subnodes are accessed by -> operator
     echo $user->name, &#39; &#39;;
     echo $user->email, &#39;<、br />&#39;;
 }

9. PHP建立日誌縮寫

建立使用者友善的日誌縮寫。

function create_slug($string){
   $slug=preg_replace(&#39;/[^A-Za-z0-9-]+/&#39;, &#39;-&#39;, $string);
   return $slug;
}

10. PHP取得客戶端真實 IP 位址

函數將取得使用者的真實 IP 位址,即使他使用代理伺服器。

function getRealIpAddr()
{
   if (!emptyempty($_SERVER[&#39;HTTP_CLIENT_IP&#39;]))
   {
       $ip=$_SERVER[&#39;HTTP_CLIENT_IP&#39;];
   }
   elseif (!emptyempty($_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;]))
   //to check ip is pass from proxy
   {
       $ip=$_SERVER[&#39;HTTP_X_FORWARDED_FOR&#39;];
   }
   else
   {
       $ip=$_SERVER[&#39;REMOTE_ADDR&#39;];
   }
   return $ip;
}

11. PHP強制性檔案下載

為使用者提供強制性的檔案下載功能。

function force_download($file)
{
   if ((isset($file))&&(file_exists($file))) {
       header("Content-length: ".filesize($file));
       header(&#39;Content-Type: application/octet-stream&#39;);
       header(&#39;Content-Disposition: attachment; filename="&#39; . $file . &#39;"&#39;);
       readfile("$file");
   }
   else {
       echo "No file selected";
   }
}

以上是php:總結一些實用的自訂函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn