PHP出现 cURL error 60 的解决办法

最近在做项目的时候遇到“cURL error 60: SSL certificate: unable to get local issuer certificate.”看提示应该是SSL 证书出了问题。

从网上下载一个cacert.pem证书文件,然后放在 :path\to\php\extras\ssl\cacert.pem 的文件目录下。

然后打开php.ini 搜索 curl.cainfo = 打开这个配置然后修改为 curl.cainfo =“path\to\php\extras\ssl\cacert.pem”保存即可

注意一定要开启openssl

PHP xml和数组的相互转换方法

    //数组转XML
    function arrayToXml($arr)
    {
        $xml = "<xml>";
        foreach ($arr as $key=>$val)
        {
            if (is_numeric($val)){
                $xml.="<".$key.">".$val."</".$key.">";
            }else{
                 $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
            }
        }
        $xml.="</xml>";
        return $xml;
    }

    //将XML转为array
    function xmlToArray($xml)
    {    
        //禁止引用外部xml实体
        libxml_disable_entity_loader(true);
        $values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);        
        return $values;
    }

 

PHP小知识点使用技巧

1、清空数组中的空白项;

$data = ['1','2','3','8','','0','9'];
print_r(array_filter($data,function($v){return !empty($var);}));

输出结果会为

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 8
    [6] => 9
)

2、include 和 require的区别及使用

include 是用到时在加载文件,并且文件出错后程序会继续运行,只是输出错误。所以加载视图文件时建议使用include

require 是一开始就加载文件,文件出错后程序就会停止运行。

include_once()和require_once()表示已加载过的不在重复加载。

3、数字格式化,每三位用逗号分割

number_format ( float number [, int decimals [, string dec_point, string thousands_sep]] ):
echo number_format('169856420');

输出结果为:169,856,420

【转】PHP编码规范

文件标记

所有PHP文件,代码标记均使用完整的PHP标签,不建议使用短标签。

<?php
  echo 'Hello world';
?>

<?
  //短标签不推荐
  echo 'Hello world';
?>

 文件格式

文件编码 为无 BOM 的 UTF-8。

纯PHP类文件,文件最后 ?> 要省略。

TextMate

在 “文件编码” 中,选择 “UTF-8(推荐)”在 “换行符” 中,选择 “LF(推荐)” 继续阅读【转】PHP编码规范

PHPDoc PHP注释的标准文档

文档注释,无非“//”和“/**/”两种 ,自己写代码,就那么点,适当写几句就好了;但是一个人总有融入团队的一天,团队的交流不是那几句注释和一张嘴能解决的,还需要通用的注释标准。

PHPDoc是PHP文档注释的一个标准,可以帮助我们在注释文档时有规范,查看别人的代码时更方便。下面的表格是我翻译的WIKI上的PHPDoc,个人英文水平有限,可以参照原文。 继续阅读PHPDoc PHP注释的标准文档

PHP判断iPhone、iPad、Android、PC、微信端访问的方法

因为工作需要我们需要知道是什么样了用户访问了我网站了,现在的移动设备种类多了,下面我们一起来看小编整理的一段php判断iPhone、iPad、Android、PC设备的例子.

我将使用Windows系统的设备定为PC,毕竟博客面向中国用户,大部分家用设备还是用的Windows系统.

原理是判断浏览器提交的USER AGENT,代码如下:

<?php 
//获取USER AGENT 
$agent = strtolower($_SERVER['HTTP_USER_AGENT']); 
//分析数据 
$is_pc = (strpos($agent, 'windows nt')) ? true : false;    
$is_iphone = (strpos($agent, 'iphone')) ? true : false;    
$is_ipad = (strpos($agent, 'ipad')) ? true : false;    
$is_android = (strpos($agent, 'android')) ? true : false;
$is_wechat  = (strpos($agent,'MicroMessenger'))?true:false;
//输出数据  
    if($is_pc){    
        echo "这是PC";    
    }    
    if($is_iphone){    
        echo "这是iPhone";    
    }
    if($is_ipad){    
        echo "这是iPad";    
    }    
    if($is_android){    
        echo "这是Android";    
    }
    if($is_wechat){
        echo "这是微信端";
    }

继续阅读PHP判断iPhone、iPad、Android、PC、微信端访问的方法

PHP之十六个魔术方法详解

PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用。 魔术方法包括:

  1. __construct(),类的构造函数
  2. __destruct(),类的析构函数
  3. __call(),在对象中调用一个不可访问方法时调用
  4. __callStatic(),用静态方式中调用一个不可访问方法时调用
  5. __get(),获得一个类的成员变量时调用
  6. __set(),设置一个类的成员变量时调用
  7. __isset(),当对不可访问属性调用isset()或empty()时调用
  8. __unset(),当对不可访问属性调用unset()时被调用。
  9. __sleep(),执行serialize()时,先会调用这个函数
  10. __wakeup(),执行unserialize()时,先会调用这个函数
  11. __toString(),类被当成字符串时的回应方法
  12. __invoke(),调用函数的方式调用一个对象时的回应方法
  13. __set_state(),调用var_export()导出类时,此静态方法会被调用。
  14. __clone(),当对象复制完成时调用
  15. __autoload(),尝试加载未定义的类
  16. __debugInfo(),打印所需调试信息

继续阅读PHP之十六个魔术方法详解

PHP生成mysql数据字典代码

<?php
/**
 * 生成mysql数据字典
 */
header ( "Content-type: text/html; charset=utf-8" );

// 配置数据库
$dbserver = "localhost";
$dbusername = "mysql用户名";
$dbpassword = "mysql密码";
$database = "mysql数据库名";

// 其他配置
$title = '数据字典';

$mysql_conn = @mysql_connect ( "$dbserver", "$dbusername", "$dbpassword" ) or die ( "Mysql connect is error." );
mysql_select_db ( $database, $mysql_conn );
mysql_query ( 'SET NAMES utf8', $mysql_conn );
$table_result = mysql_query ( 'show tables', $mysql_conn );
// 取得所有的表名
while ( $row = mysql_fetch_array ( $table_result ) ) {
  $tables [] ['TABLE_NAME'] = $row [0];
}

// 循环取得所有表的备注及表中列消息
foreach ( $tables as $k => $v ) {
  $sql = 'SELECT * FROM ';
  $sql .= 'INFORMATION_SCHEMA.TABLES ';
  $sql .= 'WHERE ';
  $sql .= "table_name = '{$v['TABLE_NAME']}'  AND table_schema = '{$database}'";
  $table_result = mysql_query ( $sql, $mysql_conn );
  while ( $t = mysql_fetch_array ( $table_result ) ) {
    $tables [$k] ['TABLE_COMMENT'] = $t ['TABLE_COMMENT'];
  }
  
  $sql = 'SELECT * FROM ';
  $sql .= 'INFORMATION_SCHEMA.COLUMNS ';
  $sql .= 'WHERE ';
  $sql .= "table_name = '{$v['TABLE_NAME']}' AND table_schema = '{$database}'";
  
  $fields = array ();
  $field_result = mysql_query ( $sql, $mysql_conn );
  while ( $t = mysql_fetch_array ( $field_result ) ) {
    $fields [] = $t;
  }
  $tables [$k] ['COLUMN'] = $fields;
}
mysql_close ( $mysql_conn );

$html = '';
// 循环所有表
foreach ( $tables as $k => $v ) {
  // $html .= '<p><h2>'. $v['TABLE_COMMENT'] . '&nbsp;</h2>';
  $html .= '<table  border="1" cellspacing="0" cellpadding="0" align="center">';
  $html .= '<caption>' . $v ['TABLE_NAME'] . '  ' . $v ['TABLE_COMMENT'] . '</caption>';
  $html .= '<tbody><tr><th>字段名</th><th>数据类型</th><th>默认值</th>
    <th>允许非空</th>
    <th>自动递增</th><th>备注</th></tr>';
  $html .= '';
  
  foreach ( $v ['COLUMN'] as $f ) {
    $html .= '<tr><td class="c1">' . $f ['COLUMN_NAME'] . '</td>';
    $html .= '<td class="c2">' . $f ['COLUMN_TYPE'] . '</td>';
    $html .= '<td class="c3">&nbsp;' . $f ['COLUMN_DEFAULT'] . '</td>';
    $html .= '<td class="c4">&nbsp;' . $f ['IS_NULLABLE'] . '</td>';
    $html .= '<td class="c5">' . ($f ['EXTRA'] == 'auto_increment' ? '是' : '&nbsp;') . '</td>';
    $html .= '<td class="c6">&nbsp;' . $f ['COLUMN_COMMENT'] . '</td>';
    $html .= '</tr>';
  }
  $html .= '</tbody></table></p>';
}

// 输出
echo '<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>' . $title . '</title>
<style>
body,td,th {font-family:"宋体"; font-size:12px;}
table{border-collapse:collapse;border:1px solid #CCC;background:#6089D4;}
table caption{text-align:left; background-color:#fff; line-height:2em; font-size:14px; font-weight:bold; }
table th{text-align:left; font-weight:bold;height:26px; line-height:25px; font-size:16px; border:3px solid #fff; color:#ffffff; padding:5px;}
table td{height:25px; font-size:12px; border:3px solid #fff; background-color:#f0f0f0; padding:5px;}
.c1{ width: 150px;}
.c2{ width: 130px;}
.c3{ width: 70px;}
.c4{ width: 80px;}
.c5{ width: 80px;}
.c6{ width: 300px;}
</style>
</head>
<body>';
echo '<h1 style="text-align:center;">' . $title . '</h1>';
echo $html;
echo '</body></html>';