工作中总结的常用PHP代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工作中总结的常用PHP代码相关的知识,希望对你有一定的参考价值。

【目录】

◆PHP常用的代码

◆HTML常用代码

【值传递 和 引用传递】

【单例模式】

【魔术常量】

【代码调试(自定义一个简单的debug函数)】

【thinkphp多表查询】

【获取客户端IP地址】

【PHP json_encode中文乱码解决方法】

【Apache设置二级域名和虚拟主机,在httpd.conf的最后】

【CURL 获取远程网页数据】

【使用CURL抓取网页】

【在cURL中用POST方法发送数据】

【使用cURL上传文件】

【上传网络图片】

【PHP将XML数据转换为数组】

【数组使用中的细节】

【数组排序】(冒泡排序、选择排序、入排序法)

【数组的查找】(顺序查找、二分查找法)

【下载文件】

【从一个标准 url 里取出文件的扩展名】

【复制非空目录】

【删除非空目录】

【PHP读取一个目录下的文件个数】

【php获取目录中的所有文件名】

【判断远程图片(文件)是否存在】

【按照年月日创建目录,并返回目录地址】

【PHP操作MySQL】

【PHP操作mysqli】

【PHP操作MySQL的事务】

【PHP删除MySQL数据库下的所有数据表】

【了解备用:PDO】

【了解备用:ADODB】

 

----------------《开始》-----------------

php常用的代码

date_default_timezone_set(PRC); //时区设置

header("Content-type: text/html; charset=utf-8");

error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE  & ~E_WARNING);

ini_set (‘memory_limit‘, ‘1280M‘);

 

◆ HTML常用代码

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

<meta charset="UTF-8">

<meta http-equiv ="refresh" content ="60"> #定时刷新页面

body{-webkit-user-select:none;}  #CSS控制页面文字不能复制

 

【值传递和引用传递】

$p=213;

function ddd(&$q){ 

    $q=314;

}

ddd($p);

echo $p; //不加&符号的时候,输出为213,加上后输出为314

 

 

【单例模式】

<?php

class demo{

     private static $obj;             //保存对象的静态属性

     private function __construct(){}   //私有化构造函数

     private function __clone(){}        //禁止克隆

     public static function getInstance(){

         if(!(self::$obj instanceof self)){

              self::$obj = new self;

         }

         return self::$obj;

     }

}

?>

 

 

【魔术常量】

class moshu{

    function __construct(){

        echo "<br>".__LINE__; //当前的行数

        echo "<br>".__FILE__; //当前文件绝对路径及文件名

        echo "<br>".__DIR__;  //当前文件绝对路径

        echo "<br>".__CLASS__;//当前的类名

        echo "<br>".__FUNCTION__;  //当前的函数(方法)名

        echo "<br>".__METHOD__;  //类的方法名

        echo "<br>".__NAMESPACE__;  //命名空间[不常用]

    }

}

$ms=new moshu();

 

 

 

【代码调试(自定义一个简单的debug函数)】

function debug(){

     $num_args = func_num_args(); //实参个数

     $arg_list = func_get_args(); //返回某一个实参,必须是实参数组的索引;

     for($i=0;$i<$num_args;$i++){

         echo "第 $i 个变量的值为:".$arg_list[$i]."<br>";

     }

     echo "当前所处的文件名为:".__FILE__."<br><br>";

}

 

 

【thinkphp多表查询】

$table="tb_user a,tb_info b";

$field="a.id,a.name,a.sex,b.img";

$order="a.id desc,b.create_time desc";

$map[‘a.is_del‘]=0;

$limit=(($_GET[‘page‘]-1)*$_GET[‘limit‘]).‘,‘.$_GET[‘limit‘];

$list = M(‘‘)->table($table)->field($field)->where($map)->order($order)->limit($limit)->select();

$sql_res = M(‘‘)->getLastSql();

 

 

【获取客户端IP地址】

function getIP(){

     $ip=getenv(‘REMOTE_ADDR‘);

     $ip_ = getenv(‘HTTP_X_FORWARDED_FOR‘);

     if (($ip_ != "") && ($ip_ != "unknown")){

         $ip=$ip_;

     }

     return $ip;

}

 

 

【PHP json_encode中文乱码解决方法】

$testJSON=array(‘name‘=>‘中文字符串‘,‘value‘=>‘test‘);

foreach ( $testJSON as $key => $value ) {

     $testJSON[$key] = urlencode ( $value );

}

echo urldecode ( json_encode ( $testJSON ) ); 

 

 

【Apache设置二级域名和虚拟主机,在httpd.conf的最后】

NameVirtualHost *:80

<VirtualHost *:80>

    ServerName  www.a.com

    DocumentRoot "D:/www"

</VirtualHost>

<Directory "D:/www" >

    Options FollowSymLinks

    AllowOverride All

    Order allow,deny

    Allow from all

</Directory>

Options FollowSymLinks 表示不列出目录下的文件,如果要列出文件列表,则使用  Options Indexes FollowSymLinks。C:\Windows\System32\drivers\etc 目录下hosts文件中(Ubuntu 系统下,是在 /etc/hosts 文件中):最后添加一行:127.0.0.1   www.a.com。

 

 

 

----------------《CURL》-----------------

【CURL 获取远程网页数据】

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, "http://www.baidu.com");

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0); //第三个参数是1表示不输出,0允许输出

$data = curl_exec($curl);

curl_close($curl);

 

 

【使用CURL抓取网页】

<?php

header("Content-type:text/html;charset=utf-8");

/*CURL的具体实现,抓取网页,类似于直接file_get_contents() */

//--- 1.初始化

$ch = curl_init();

//--- 2.设置选项,包括url

curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com");

//将curl_exec() 获取的信息以文件流的形式返回,而不是直接输出

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//启用时会将头文件的信息作为数据流输出

curl_setopt($ch, CURLOPT_HEADER, 1);

//--- 3.执行并获取HTML文档内容

$output = curl_exec($ch);

//curl_getinfo() 函数返回CURL执行后这一请求的相关信息,对调试和排查错误很有用

//$info = curl_getinfo($ch); print_r($info);

//--- 4.释放CURL句柄

curl_close($ch);

echo $output;

?>

 

 

【在cURL中用POST方法发送数据】

<?php

header("Content-type:text/html;charset=utf-8");

//提交后的数据接收部分

if(isset($_GET[‘type‘]) && $_GET[‘type‘]==‘tijiao‘){

     print_r($_POST);exit;

}

//CURL请求部分

$url = "http://localhost/test/code04/code03.php?type=tijiao";

$post_data = array(

     ‘username‘=>‘root‘,

     ‘password‘=>‘123456‘,

     ‘name‘=>‘管理员‘,

);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

//设置为POST

curl_setopt($ch, CURLOPT_POST, 1);

//把POST的变量加上

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

$output = curl_exec($ch);

curl_close($ch);

echo $output;

?>

 

 

【使用cURL上传文件】

<?php

error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE  & ~E_WARNING);

header("Content-type:text/html;charset=utf-8");

//提交后的数据接收部分

if(isset($_GET[‘type‘]) && $_GET[‘type‘]==‘tijiao‘){

     echo ‘<pre>‘;print_r($_FILES);echo ‘</pre>‘;exit;

}

//CURL请求部分

$url = "http://localhost/test/code04/code04.php?type=tijiao";

//注意下面一定要有@符号!

$post_data = array(

     ‘files1‘=>‘@E:/test/s1.jpg‘,

     ‘files3‘=>‘@E:/test/s2.zip‘,

);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

$output = curl_exec($ch);

curl_close($ch);

echo $output;

?>

 

 

【上传网络图片】

$pic_url = $_POST[‘pic_url‘];

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://imgtest.qwbcg.mobi/image/[email protected]&pic_url= $pic_url" );

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HEADER, 0);

$output = curl_exec($ch); //执行并获取HTML文档内容

curl_close($ch);

print_r($output );

 

 

 

----------------《PHP数组》-----------------

【PHP将XML数据转换为数组】

function xml_to_array($xml)

{

     $array = (array)(simplexml_load_string($xml));

     foreach ($array as $key=$item){

         $array[$key]  =  struct_to_array((array)$item);

     }

     return $array;

}

function struct_to_array($item) {

     if(!is_string($item)) {

         $item = (array)$item;

         foreach ($item as $key=$val){

              $item[$key]  =  struct_to_array($val);

         }

     }

     return $item;

}

 

 

【数组使用中的细节】

(1)创建数组时,如果没有给某个元素指定key,则会用目前最大的key(整数)+1 作为该元素的key:

$arr=array(5=>"logo",567,90);

       echo $arr[5];   //值为”logo”

       echo $arr[6];   //值为567

 

(2)如果使用[true ,false ,null,小数] 作为key, 则等价于[1,0,””(空字符串),截断小数点后的数值]

$arr[true]="hello";   //==> $arr[1]

       $arr[false]="world";  //==> $arr[0]

       $arr[null]="北京";    //==> $arr[""];

       $arr[3.14]="北京";    //==> $arr[3];

 

 

【数组排序】从效率上看 ------- 冒泡法< 选择排序法 < 插入排序法

(1)冒泡排序

function bubbleSort(&$arr){     //注意这里&

     $temp=0;

     for($i=0;$i<count($arr)-1;$i++){

         for($j=0;$j<count($arr)-1-$i;$j++){

              if($arr[$j]>$arr[$j+1]){ 

                   $temp=$arr[$j];

                   $arr[$j]=$arr[$j+1];

                   $arr[$j+1]=$temp;

              }

         }

     }

}

 

 

(2)选择排序

 function selectSort(&$arr){    

       $temp=0;

       for($i=0;$i<count($arr)-1;$i++){            

          //假设 $i就是最小的数

          $minVal=$arr[$i];

          //记录我认为的最小数的下标

          $minIndex=$i;

          for($j=$i+1;$j<count($arr);$j++){

              //说明我们认为的最小值,不是最小值

              if($minVal>$arr[$j]){

                 $minVal=$arr[$j];

                 $minIndex=$j;

              }

          }

          //最后交换       

          $temp=$arr[$i];

          $arr[$i]=$arr[$minIndex];

          $arr[$minIndex]=$temp;

       }

}

 

 

(3)插入排序法

 function insertSort(&$arr){             

       //先默认下标为0 这个数已经是有序

       for($i=1;$i<count($arr);$i++){

               //$insertVal是准备插入的数

               $insertVal=$arr[$i];

               //准备先和$insertIndex比较

               $insertIndex=$i-1;

               

               //如果这个条件满足,说明,我们还没有找到适当的位置

               while($insertIndex>=0&&$insertVal<$arr[$insertIndex]){                 

                       //同时把数后移

                       $arr[$insertIndex+1]=$arr[$insertIndex];

                       $insertIndex--;

                     

               }

               //插入(这时就给$insertVal找到适当位置)           

               $arr[$insertIndex+1]=$insertVal;  

       }             

}

 

 

【数组的查找】

(1)顺序查找

function search(&$arr,$findVal){

       $flag=false;    

       foreach($arr as $k=>$v){          

          if($findVal==$arr[$k]){

                   echo "找到了,下标为:$k".‘<br>‘;

                   $flag=true;

                   //break;

          }

       }

       if(!$flag){

          echo ‘没有找到!‘;

       }

}

 

 

(1)二分查找法(前提是 该数组本身已经是一个有序数组. 如果该数组不是有序的,则必须先排序再查找)

function binarySearch(&$arr,$findVal,$leftIndex,$rightIndex){             

       //$leftIndex为数组最左端下标[0],$rightIndex为最右端下标[count($arr)]

       //当 $leftIndex>$rightIndex 说明没有数

       if($leftIndex>$rightIndex){

            echo "没有找到...";

            return; //必须有

       }

      

       //找到中间这个数

       $middleIndex=round(($rightIndex+$leftIndex)/2);

       //如果大于中间这个数,则向后面找

       if($findVal>$arr[$middleIndex]){                    

               binarySearch($arr,$findVal,$middleIndex+1,$rightIndex);

       }

       //如果小于中间这个数,则向前面找

       elseif($findVal<$arr[$middleIndex]){

               binarySearch($arr,$findVal,$leftIndex,$middleIndex-1);

       }else{

           echo "找到这个数,下标是:$middleIndex";

       }             

}

 

 

 

----------------《PHP操作文件》-----------------

【下载文件】

<?php

     header("Content-Type:image/gif");

     header(‘Content-Disposition: attachment; filename="logo3333.gif"‘);

     header(‘Content-Length:‘.filesize("logo.gif"));

     readfile("logo.gif");

 

 

【从一个标准 url 里取出文件的扩展名】

function getExt($url){

   $arr = parse_url($url);

   $file = basename($arr[‘path‘]);

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

   return $ext[1];

}

$str = "http://www.sina.com.cn/abc/de/fg.php?id=1";

echo getExt($str);// 输出:php

 

 

【复制非空目录】

<?php

     header("Content-type: text/html; charset=utf-8");

     $dirname="phpMyAdmin";

     copydir($dirname,"hello1");

 

     functioncopydir($dirsrc, $dirto){

          if(is_file($dirto)){

              echo"目标不是目录不能创建";

              return;

          }

          if(!file_exists($dirto)){

              mkdir($dirto);

              //echo "创建目录".$dirto."成功!<br>";

          }         

          $dir=opendir($dirsrc);

          while($filename=readdir($dir)){

              if($filename!="."&& $filename!=".."){

                   $file1=$dirsrc."/".$filename;

                   $file2=$dirto."/".$filename;

                   if(is_dir($file1)){

                        copydir($file1, $file2);//递归处理

                  }else{

              

                        copy($file1, $file2);

                   }

              }

          }

          closedir($dir);

     }

?>

 

 

【删除非空目录】

<?php

     header("Content-type: text/html; charset=utf-8");

     $dirname="phpMyAdmin";

     deldir($dirname);

 

     functiondeldir($dirname){

          if(file_exists($dirname)) {

              $dir=opendir($dirname);

              while($filename=readdir($dir)){

                   if($filename!="."&& $filename!=".."){

                        $file=$dirname."/".$filename;

                        if(is_dir($file)){

                        

                             deldir($file);//使用递归删除子目录  

                        }else{

                             echo‘删除文件<b>‘.$file.‘</b>成功<br>‘;

                             unlink($file);

                        }

                   }

              }

              closedir($dir);

              echo‘删除目录<b>‘.$dirname.‘</b>成功<br>‘;

              rmdir($dirname);

          }

     }

?>

 

 

【PHP读取一个目录下的文件个数】

<?php

function FileCount($dir){

     global $count;

     if(is_dir($dir)&&file_exists($dir)){

         $ob=scandir($dir);

         foreach($ob as $file){

              if($file=="."||$file==".."){

                   continue;

              }

              $file=$dir."/".$file;

              if(is_file($file)){

                   $count++;

              }elseif(is_dir($file)){

                   FileCount($file);

              }

         }

     } 

}

//调用方法

$count=0;

FileCount("DataRoom");

echo $count;exit;

?>

 

 

【php获取目录中的所有文件名】

<?php

$handler = opendir(‘pic/common‘);

while( ($filename = readdir($handler)) !== false ) {

      if($filename != "." && $filename != ".."){

           echo $filename;

      }

}

closedir($handler);

?>

 

 

【判断远程图片(文件)是否存在】

function check_remote_file_exists($url) {

    $curl = curl_init($url);

    curl_setopt($curl, CURLOPT_NOBODY, true); // 不取回数据

    $result = curl_exec($curl);  // 发送请求

    $found = false;

    if ($result !== false) {

        $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); 

        if ($statusCode == 200) {

            $found = true;  

        }

    }

    curl_close($curl);

    return $found;

}

 

 

 

【按照年月日创建目录,并返回目录地址】

function makeDir(){

     date_default_timezone_set(‘Asia/Shanghai‘);

     $log_path = $_SERVER[‘DOCUMENT_ROOT‘].‘/FxData‘;

     //创建“年份”文件夹,格式为: /Data/2014

     $log_path_year = $log_path.‘/‘.date("Y",time());

     if(!is_dir($log_path_year)) {

        mkdir($log_path_year, 0777, true);

     }

     //创建“月份”文件夹,格式为: /Data/2014/201412

     $log_path_month = $log_path_year.‘/‘.date("Ym",time());

     if(!is_dir($log_path_month)) {

        mkdir($log_path_month, 0777, true);

     }

     //创建“日期”文件夹,格式为: /Data/2014/201412/20141212

     $log_path_date = $log_path_month.‘/‘.date("Ymd",time());

     if(!is_dir($log_path_date)) {

        mkdir($log_path_date, 0777, true);

     }

     return $log_path_date;

}

 

 

 

----------------《PHP操作MySQL》-----------------

【PHP操作mysql

$conn=mysql_connect($db_host,$db_user,$db_pwd) or die("连接服务器失败");

mysql_select_db($db_name,$conn) or die("选择数据库失败");

$result=mysql_query("select * from employee") or die("查询失败");

while($row = mysql_fetch_array($result)){

    $res[] = $row;

}

print_r($res);

mysql_free_result($result);// 释放结果集内存

mysql_close($conn);

 

 

【PHP操作mysqli】

$mysqli=new mysqli($db_host,$db_user,$db_pwd,$db_name) ;

$result=$mysqli->query("select * from employee");

while($row =$result->fetch_array()){  

    $res[] = $row;

}

print_r($res);

$result->free();

$mysqli->close();

 

 

 

【PHP操作MySQL的事务】

$mysqli=new mysqli("localhost", "root", "123456", "xsphpdb");

$mysqli->autocommit(0);

$error=true;

$price=50;

$sql="update zh set ye=ye-{$price} where name=‘zhangsan‘";

$result=$mysqli->query($sql);

if(!$result){

     $error=false;

     echo "从张三转出失败<br>";

}else{

     if($mysqli->affected_rows==0){

         $error=false;

         echo "张三的钱没有变化";   

     }else{

         echo "从张三账号中转出成功!<br>";

     }

}

$sql="update zh set ye=ye+{$price} where name=‘lisi1‘";

$result=$mysqli->query($sql);

if(!$result){

     $error=false;

     echo "从李四转入失败<br>";

}else{

     if($mysqli->affected_rows==0){

         $error=false;

         echo "李四的钱没有变化";   

     }else{

         echo "向李四账号中转入成功!<br>";

     }

}

if($error){

     echo "转账成功!";

     $mysqli->commit();

}else{

     echo "转账失败!";

     $mysqli->rollback();

}

$mysqli->autocommit(1);

$mysqli->close();

 

 

【PHP删除MySQL数据库下的所有数据表】

$hostname =‘localhost‘; $userid = ‘username‘; $password = ‘password‘; $dbname = ‘dbname‘; 

$connect = mysql_connect($hostname,$userid,$password); 

mysql_select_db($dbname);

$result = mysql_query("show table status from $dbname",$connect); 

while($data=mysql_fetch_array($result)) { 

     mysql_query("drop table $data[Name]"); 

}

 

 

 

【了解备用:PDO】

PDO即 PHP DATA OBJECTS,是PHP定义的一个轻量级的数据操作接口,并且此接口实现了事务和不同数据库之间的抽象。

$dsn = ‘mysql:dbname=renxing;host=localhost‘;

$user_name = ‘root‘; $user_pwd = ‘root‘;

$pdo = new PDO($dsn, $user_name, $user_pwd);

$query="select * from employee";

foreach ( $pdo->query($query) as $row){

    $res[] = $row;

}

print_r($res);

//执行操作:$pdo->exec("delete from employee where id>4";);

 

 

◆ PDO的事务:

(1)开始事务:beginTransaction()方法,该方法会关闭自动提交(autocommit)模式,直到事务提交或者回滚以后才能恢复。

(2)提交事务:commit()方法成功返回true,否则返回false

(3)回滚事务:rollBack()方法

 

 

【了解备用:ADODB】

include(‘adodb/adodb.inc.php‘);

$conn = ADONewConnection(‘mysql‘);//MySQL数据库

$conn->Connect("localhost", "root", "root", "renxing");//连接数据库

$result=$conn->Execute("select * from employee");//执行查询

foreach ($result as $row) {

    print_r($row);

}

$conn -> Close();//关闭连接

 

 

◆ ADODB获取结果:

(1)GetAll()方法可获取表中的所有记录,并返回包含结果集的一个数组

(2)GetRow()方法可获取单条记录

(3)GetOne()方法可获取结果集中某条记录的第一个字段的值。

(4)RecordCount()方法可获取结果集中行的个数,FieldCount()方法可获取结果集中字段的个数。

(5)FetchField()方法可获取指定字段的名称、数据类型、是否为主键。

 

◆ ADODB的其他功能:

(1)开启调试功能:$conn->debug=true;程序在运行时会输出SQL语句。

(2)对查询进行缓存:$conn->CacheExecute($time,$query);清除缓存使用CacheFlush()方法。

(3)ADODB的事务处理:开始事务StartTrans()方法,结束事务Complete()方法,强制执行回滚FailTrans()方法,获知处理事务是否成功HasFailedTrans()方法。

 

 

----------------《完》-----------------

 

以上是关于工作中总结的常用PHP代码的主要内容,如果未能解决你的问题,请参考以下文章

21个常用代码片段

PHP常用代码片段

56个PHP开发常用代码

回归 | js实用代码片段的封装与总结(持续更新中...)

10个超级有用必须收藏的PHP代码样例

运行/调试你的PHP代码