收集的二十一个实用便利的PHP函数代码

  PHP 是目前使用最广泛的基于 Web 的编程语言,驱动着数以百万计的网站,其中也包括如 Facebook 等一些大型站点。这里收集了 21 段实用便捷的 PHP 代码摘录,对每种类型的 PHP 开发者都会有所帮助。

  

  1. PHP可阅读随机字符串

  此代码将创建一个可阅读的字符串,使其更接近词典中的单词,实用且具有密码验证功能。

/**************

  *@length - length of random string (must be a multiple of 2)

  **************/

  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生成一个随机字符串

  如果不需要可阅读的字符串,使用此函数替代,即可创建一个随机字符串,作为用户的随机密码等。

/*************

  *@l - length of random string

  */

  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='[email protected]', $linkText='Contact Us', $attrs ='class="emailencoder"' )

  {

  // remplazar aroba y puntos

  $email = str_replace('@', '@', $email);

  $email = str_replace('.', '.', $email);

  $email = str_split($email, 5);

  $linkText = str_replace('@', '@', $linkText);

  $linkText = str_replace('.', '.', $linkText);

  $linkText = str_split($linkText, 5);

  $part1 = '<a href="ma';

  $part2 = 'ilto:';

  $part3 = '" '. $attrs .' >';

  $part4 = '</a>';

  $encoded = '<script type="text/javascript">';

  $encoded .= "document.write('$part1');";

  $encoded .= "document.write('$part2');";

  foreach($email as $e)

  {

  $encoded .= "document.write('$e');";

  }

  $encoded .= "document.write('$part3');";

  foreach($linkText as $l)

  {

  $encoded .= "document.write('$l');";

  }

  $encoded .= "document.write('$part4');";

  $encoded .= '</script>';

  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 '<a target="_blank" href="'.$dir.$file.'">'.$file.'</a><br>'."\n";

  }

  }

  closedir($handle);

  }

  }

  }

  6. PHP销毁目录

  删除一个目录,包括它的内容。

/*****

  *@dir - Directory to destroy

  *@virtual[optional]- whether a virtual directory

  */

  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 == '.' || $file == '..')

  {

  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='{"id":1,"name":"foo","email":"[email protected]","interest":["wordpress","php"]} ';

  $obj=json_decode($json_string);

  echo $obj->name; //prints foo

  echo $obj->interest[1]; //prints php

  8. PHP解析 XML 数据

//xml string

  $xml_string="<?xml version='1.0'?>

  <users>

  <user id='398'>

  <name>Foo</name>

  <email>[email protected]</name>

  </user>

  <user id='867'>

  <name>Foobar</name>

  <email>[email protected]</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['id'], ' ';

  //subnodes are accessed by -> operator

  echo $user->name, ' ';

  echo $user->email, '<br />';

  }

  9. PHP创建日志缩略名

  创建用户友好的日志缩略名。

function create_slug($string){

  $slug=preg_replace('/[^A-Za-z0-9-]+/', '-', $string);

  return $slug;

  }

  10. PHP获取客户端真实 IP 地址

  该函数将获取用户的真实 IP 地址,即便他使用代理服务器。

function getRealIpAddr()

  {

  if (!emptyempty($_SERVER['HTTP_CLIENT_IP']))

  {

  $ip=$_SERVER['HTTP_CLIENT_IP'];

  }

  elseif (!emptyempty($_SERVER['HTTP_X_FORWARDED_FOR']))

  //to check ip is pass from proxy

  {

  $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];

  }

  else

  {

  $ip=$_SERVER['REMOTE_ADDR'];

  }

  return $ip;

  }

  11. PHP强制性文件下载

  为用户提供强制性的文件下载功能。

/********************

  *@file - path to file

  */

  function force_download($file)

  {

  if ((isset($file))&&(file_exists($file))) {

  header("Content-length: ".filesize($file));

  header('Content-Type: application/octet-stream');

  header('Content-Disposition: attachment; filename="' . $file . '"');

  readfile("$file");

  } else {

  echo "No file selected";

  }

  }

  12. PHP创建标签云

function getCloud( $data = array(), $minFontSize = 12, $maxFontSize = 30 )

  {

  $minimumCount = min( array_values( $data ) );

  $maximumCount = max( array_values( $data ) );

  $spread = $maximumCount - $minimumCount;

  $cloudHTML = '';

  $cloudTags = array();

  $spread == 0 && $spread = 1;

  foreach( $data as $tag => $count )

  {

  $size = $minFontSize + ( $count - $minimumCount )

  * ( $maxFontSize - $minFontSize ) / $spread;

  $cloudTags[] = '<a style="font-size: ' . floor( $size ) . 'px'

  . '" href="#" title="\'' . $tag .

  '\' returned a count of ' . $count . '">'

  . htmlspecialchars( stripslashes( $tag ) ) . '</a>';

  }

  return join( "\n", $cloudTags ) . "\n";

  }

  /**************************

  **** Sample usage ***/

  $arr = Array('Actionscript' => 35, 'Adobe' => 22, 'Array' => 44, 'Background' => 43,

  'Blur' => 18, 'Canvas' => 33, 'Class' => 15, 'Color Palette' => 11, 'Crop' => 42,

  'Delimiter' => 13, 'Depth' => 34, 'Design' => 8, 'Encode' => 12, 'Encryption' => 30,

  'Extract' => 28, 'Filters' => 42);

  echo getCloud($arr, 12, 36);

  13. PHP寻找两个字符串的相似性

  PHP 提供了一个极少使用的 similar_text 函数,但此函数非常有用,用于比较两个字符串并返回相似程度的百分比。

similar_text($string1, $string2, $percent);

  //$percent will have the percentage of similarity

  14. PHP在应用程序中使用 Gravatar 通用头像

  随着 WordPress 越来越普及,Gravatar 也随之流行。由于 Gravatar 提供了易于使用的 API,将其纳入应用程序也变得十分方便。

/******************

  *@email - Email address to show gravatar for

  *@size - size of gravatar

  *@default - URL of default gravatar to use

  *@rating - rating of Gravatar(G, PG, R, X)

  */

  function show_gravatar($email, $size, $default, $rating)

  {

  echo '<img src="http://www.gravatar.com/avatar.php?gravatar_id='.md5($email).

  '&default='.$default.'&size='.$size.'&rating='.$rating.'" width="'.$size.'px"

  height="'.$size.'px" />';

  }

  15. PHP在字符断点处截断文字

  所谓断字 (word break),即一个单词可在转行时断开的地方。这一函数将在断字处截断字符串。

// Original PHP code by Chirp Internet: www.chirp.com.au

  // Please acknowledge use of this code by including this header.

  function myTruncate($string, $limit, $break=".", $pad="...") {

  // return with no change if string is shorter than $limit

  if(strlen($string) <= $limit)

  return $string;

  // is $break present between $limit and the end of the string?

  if(false !== ($breakpoint = strpos($string, $break, $limit))) {

  if($breakpoint < strlen($string) - 1) {

  $string = substr($string, 0, $breakpoint) . $pad;

  }

  }

  return $string;

  }

  /***** Example ****/

  $short_string=myTruncate($long_string, 100, ' ');

  16. PHP文件 Zip 压缩

/* creates a compressed zip file */

  function create_zip($files = array(),$destination = '',$overwrite = false) {

  //if the zip file already exists and overwrite is false, return false

  if(file_exists($destination) && !$overwrite) { return false; }

  //vars

  $valid_files = array();

  //if files were passed in...

  if(is_array($files)) {

  //cycle through each file

  foreach($files as $file) {

  //make sure the file exists

  if(file_exists($file)) {

  $valid_files[] = $file;

  }

  }

  }

  //if we have good files...

  if(count($valid_files)) {

  //create the archive

  $zip = new ZipArchive();

  if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {

  return false;

  }

  //add the files

  foreach($valid_files as $file) {

  $zip->addFile($file,$file);

  }

  //debug

  //echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status;

  //close the zip -- done!

  $zip->close();

  //check to make sure the file exists

  return file_exists($destination);

  }

  else

  {

  return false;

  }

  }

  /***** Example Usage ***/

  $files=array('file1.jpg', 'file2.jpg', 'file3.gif');

  create_zip($files, 'myzipfile.zip', true);

  17. PHP解压缩 Zip 文件

/**********************

  *@file - path to zip file

  *@destination - destination directory for unzipped files

  */

  function unzip_file($file, $destination){

  // create object

  $zip = new ZipArchive() ;

  // open archive

  if ($zip->open($file) !== TRUE) {

  die ('Could not open archive');

  }

  // extract contents to destination directory

  $zip->extractTo($destination);

  // close archive

  $zip->close();

  echo 'Archive extracted to directory';

  }

  18. PHP为 URL 地址预设 http 字符串

  有时需要接受一些表单中的网址输入,但用户很少添加 http:// 字段,此代码将为网址添加该字段。

if (!preg_match("/^(http|ftp):/", $_POST['url'])) {

  $_POST['url'] = 'http://'.$_POST['url'];

  }

  19. PHP将网址字符串转换成超级链接

  该函数将 URL 和 E-mail 地址字符串转换为可点击的超级链接。

function makeClickableLinks($text) {

  $text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_+.~#?&//=]+)',

  '<a href="\1">\1</a>', $text);

  $text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_+.~#?&//=]+)',

  '\1<a href="http://\2">\2</a>', $text);

  $text = eregi_replace('([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3})',

  '<a href="mailto:\1">\1</a>', $text);

  return $text;

  }

  20. PHP调整图像尺寸

  创建图像缩略图需要许多时间,此代码将有助于了解缩略图的逻辑。

/**********************

  *@filename - path to the image

  *@tmpname - temporary path to thumbnail

  *@xmax - max width

  *@ymax - max height

  */

  function resize_image($filename, $tmpname, $xmax, $ymax)

  {

  $ext = explode(".", $filename);

  $ext = $ext[count($ext)-1];

  if($ext == "jpg" || $ext == "jpeg")

  $im = imagecreatefromjpeg($tmpname);

  elseif($ext == "png")

  $im = imagecreatefrompng($tmpname);

  elseif($ext == "gif")

  $im = imagecreatefromgif($tmpname);

  $x = imagesx($im);

  $y = imagesy($im);

  if($x <= $xmax && $y <= $ymax)

  return $im;

  if($x >= $y) {

  $newx = $xmax;

  $newy = $newx * $y / $x;

  }

  else {

  $newy = $ymax;

  $newx = $x / $y * $newy;

  }

  $im2 = imagecreatetruecolor($newx, $newy);

  imagecopyresized($im2, $im, 0, 0, 0, 0, floor($newx), floor($newy), $x, $y);

  return $im2;

  }

  21. PHP检测 ajax 请求

  大多数的 JavaScript 框架如 jquery,Mootools 等,在发出 Ajax 请求时,都会发送额外的 HTTP_X_REQUESTED_WITH 头部信息,头当他们一个ajax请求,因此你可以在服务器端侦测到 Ajax 请求。

if(!emptyempty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){

  //If AJAX Request Then

  }else{

  //something else

  }

  英文原稿:21 Really Useful & Handy PHP Code Snippets | Web Developer Plus

  翻译整理:21+ 实用便捷的 PHP 代码摘录 | 芒果