<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[apollo__的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/apollo__</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; apollo__]]></copyright><item><title><![CDATA[php csv导出]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/120370519</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/120370519</guid><author>apollo__</author><pubDate>Sat, 18 Sep 2021 16:55:21 +0800</pubDate><description><![CDATA[public function export_csv($filename,$data) {
        $data = mb_convert_encoding($data, "GBK","utf-8");
        $filename=iconv("utf-8", "GBK", $filename);
        header("Content-type:text/csv");
        header("Content-Disposition:attachment;filename=..]]></description><category></category></item><item><title><![CDATA[php实现抢红包 使用二倍均值法]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/120354335</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/120354335</guid><author>apollo__</author><pubDate>Fri, 17 Sep 2021 18:12:40 +0800</pubDate><description><![CDATA[&lt;?php

class RedEnvelopes
{
    public $remainSize = 20;  //份数
    public $remainMoney = '10.00'; // 总额
    public $min = '0.01';//最小
    public $scale = 2;//倍数


    public function getRandomMoney()
    {
        //判断份数不小于0 或者 于0比较
        if ($this-&.]]></description><category></category></item><item><title><![CDATA[用户密码安全]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/120350971</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/120350971</guid><author>apollo__</author><pubDate>Fri, 17 Sep 2021 16:00:25 +0800</pubDate><description><![CDATA[一加密密码

存储用户密码前应该先对密码进行加密（MD5，SHA等算法），然后存储在数据库中。


hash("sha256",$password);


二加盐

1使用盐（salt）来混淆加密后的值。

采用随机salt，来加大安全系数。


    $salt=rand(1,10000);
$password=sha1($password.$salt);

2使用 password_hash()函数，指定第二个参数为PASSWORD BCRYPT


$password = p...]]></description><category></category></item><item><title><![CDATA[SQL注入漏洞]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/120350059</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/120350059</guid><author>apollo__</author><pubDate>Fri, 17 Sep 2021 15:40:46 +0800</pubDate><description><![CDATA[SQL注入
在处理程序时，未对用户可控参数进行严格校验，如利用字符串拼接的方式构造SQL语句在数据库中执行，很容易埋下安全隐患。
SQL注入可以造成数据库信息泄露。
SQL注入攻击方式：①报错注入②普通注入③隐式类型注入④盲注⑤宽字节注入⑥二次解码注入


1报错注入


my.php?name=李四'errr
select * from user where name ='李四'errr'


恶意攻击者使用特殊的方式使数据发生错误并产生报错信息，从而获得数据库和系统信息，方便攻击者进行下一步攻击。
要.]]></description><category></category></item><item><title><![CDATA[php使用file_put_contents读取csv]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/120349466</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/120349466</guid><author>apollo__</author><pubDate>Fri, 17 Sep 2021 15:08:24 +0800</pubDate><description><![CDATA[&lt;?php
function read_csv($filePath) {
    $str = file_get_contents($filePath);
    $data = explode("\n",$str);
    $csv_array = [];
    foreach ($data as $k=&gt;$v){
        $csv_array[] = preg_split('/(?:"[^"]*"|)\K\s*(,\s*|$)/', $v);
    }
    return .]]></description><category></category></item><item><title><![CDATA[php 日志写入]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/120333740</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/120333740</guid><author>apollo__</author><pubDate>Thu, 16 Sep 2021 17:26:39 +0800</pubDate><description><![CDATA[&lt;?php

class JsonLog {

    const LEVEL_ERROR = 1;//记录一个致命错误消息
    const LEVEL_WARNING = 2;// 记录一个警告消息
    const LEVEL_INFO = 3;//记录一些有用信息的消息
    const LEVEL_TRACE = 4;//记录消息跟踪一段代码如何运行

    public $filename = "log";//日志名
    public $suffix = ".log";//文.]]></description><category></category></item><item><title><![CDATA[php 金额高度计算]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/120333704</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/120333704</guid><author>apollo__</author><pubDate>Thu, 16 Sep 2021 17:25:24 +0800</pubDate><description><![CDATA[&lt;?php

class DataHelp{

    /**
     * @param $number
     * @return string
     * 转化为分
     */
    public static function convertCent($number) {
        $number = bcmul($number, 100);
        return $number;
    }

    /**
     * @param $number
     *.]]></description><category></category></item><item><title><![CDATA[php xml转数组]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/120333675</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/120333675</guid><author>apollo__</author><pubDate>Thu, 16 Sep 2021 17:24:23 +0800</pubDate><description><![CDATA[/**
     * xml转数组
     * @param $xml
     * @return mixed
     */
    public static function xmlToArray($xml){
        libxml_disable_entity_loader(true);
        $arr = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCD...]]></description><category></category></item><item><title><![CDATA[php检查必要参数的isset和empty]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/120333507</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/120333507</guid><author>apollo__</author><pubDate>Thu, 16 Sep 2021 17:18:17 +0800</pubDate><description><![CDATA[//检查必要参数的isset和empty
//params array 需要检查的key
//request array 数据
public function checkValid($params,$request) {
    $lack_params = array();
    foreach ($params as $value) {
        if (!isset($request[$value])) {
            $lack_params[] = $value;
     .]]></description><category></category></item><item><title><![CDATA[php获取请求数据]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/120333423</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/120333423</guid><author>apollo__</author><pubDate>Thu, 16 Sep 2021 17:15:14 +0800</pubDate><description><![CDATA[//获取数据
public function getData() {
    $request = [];
    $fileRequest = [];
    if($_GET) {
        foreach($_GET as $key =&gt; $val) {
            $request[$key] = $val;
        }
    }
    if($_POST) {
        foreach($_POST as $key =&gt; $val) {
     .]]></description><category></category></item><item><title><![CDATA[php获取excel]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/120333295</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/120333295</guid><author>apollo__</author><pubDate>Thu, 16 Sep 2021 17:10:15 +0800</pubDate><description><![CDATA[//获取对应的excel横坐标
public function getExcelCoordinates($coordinate)
{
    $alpha = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
    $coordinate = $coordinate/1-1;
   .]]></description><category></category></item><item><title><![CDATA[读取excel文件]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/120332262</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/120332262</guid><author>apollo__</author><pubDate>Thu, 16 Sep 2021 16:35:45 +0800</pubDate><description><![CDATA[try {
    $inputFileType = PHPExcel_IOFactory::identify($filePath);
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
    $objPHPExcel = $objReader-&gt;load($filePath);
} catch(Exception $e) {

}

// 确定要读取的sheet
$sheet = $objPHPExcel-&gt;.]]></description><category></category></item><item><title><![CDATA[PDO封装mysql]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/120332087</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/120332087</guid><author>apollo__</author><pubDate>Thu, 16 Sep 2021 16:29:44 +0800</pubDate><description><![CDATA[&lt;?php

class DAOPDO
{

    protected static $_instance = null;
    protected $dbName = '';
    protected $dsn;
    protected $dbh;

    //构造
    private function __construct($dbHost, $dbUser, $dbPasswd, $dbName, $dbCharset)
    {
        try {
        .]]></description><category></category></item><item><title><![CDATA[过滤表情 php]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/116230210</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/116230210</guid><author>apollo__</author><pubDate>Wed, 28 Apr 2021 11:35:56 +0800</pubDate><description><![CDATA[$key_word = preg_replace_callback( '/./u',
    function (array $match) {
        return strlen($match[0]) &gt;= 4 ? '' : $match[0];
    }, 
    $key_word);
]]></description><category></category></item><item><title><![CDATA[git部署本地项目]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/113122777</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/113122777</guid><author>apollo__</author><pubDate>Mon, 25 Jan 2021 16:54:52 +0800</pubDate><description><![CDATA[初始化git
git init  

将本地仓库与的远程仓库关联
git remote add origin  git@codeup.teambition.com:qx/ydd/mchapi.git

拉取远程分支
git fetch

创建分支
git add .
git commit -m ""
git branch master

关联本地的分支与服务器上的分支
git branch --set-upstream  master origin/master

添加忽略文件
git update-ind]]></description><category></category></item><item><title><![CDATA[小程序web-view网页调取小程序支付功能]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/113122529</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/113122529</guid><author>apollo__</author><pubDate>Mon, 25 Jan 2021 16:52:33 +0800</pubDate><description><![CDATA[原理：利用JSSDK提供的wx.miniProgram.navigateTo接口传递小程序支付接口必要的参数，在小程序里调起支付
1.payment.html
(1)引入微信JSSDK
&lt;script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"&gt;&lt;/script&gt;

(2)修改立即支付按钮代码
&lt;a id="btn_pay_submit" data-url="&lt;{l]]></description><category></category></item><item><title><![CDATA[html5跳转]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/78505066</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/78505066</guid><author>apollo__</author><pubDate>Sat, 11 Nov 2017 10:29:50 +0800</pubDate><description><![CDATA[1.定时跳转或者原地刷新HTML5页面跳转的几种方法优点：简单缺点：StrutsTiles中无法使用对于刷新当前页面js控制为：[javascript] view plain copy window.location.reload();//刷新当前页面，重新向服务器请求数据 2.js手动替换跳转^_^HTML5页面跳转的几种方法优点：灵活，可以结合更多的其他功能缺点：受到不同浏览器的影响上面的方法]]></description><category></category></item><item><title><![CDATA[正则]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/77924848</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/77924848</guid><author>apollo__</author><pubDate>Sun, 10 Sep 2017 20:37:48 +0800</pubDate><description><![CDATA[一、校验数字的表达式
 


数字：^[0-9]*$

n位的数字：^\d{n}$

至少n位的数字：^\d{n,}$

m-n位的数字：^\d{m,n}$

零和非零开头的数字：^(0|[1-9][0-9]*)$

非零开头的最多带两位小数的数字：^([1-9][0-9]*)+(.[0-9]{1,2})?$

带1-2位小数的正数或负数：^(\-)?\d+(\.\]]></description><category></category></item><item><title><![CDATA[签到  积分  管理系统]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/77924803</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/77924803</guid><author>apollo__</author><pubDate>Sun, 10 Sep 2017 20:33:04 +0800</pubDate><description><![CDATA[<?php

?>

    
        
            连续签到天数
            获得星星数量
            获得的积分
            最后一次签到时间
        
        
            
            
                    =1){?>
                
          ]]></description><category></category></item><item><title><![CDATA[php对称加密]]></title><link>https://blog.youkuaiyun.com/apollo__/article/details/77892338</link><guid>https://blog.youkuaiyun.com/apollo__/article/details/77892338</guid><author>apollo__</author><pubDate>Fri, 08 Sep 2017 11:04:57 +0800</pubDate><description><![CDATA[* 简单对称加密算法之加密

* @param String $string 需要加密的字串

* @param String $skey 加密EKY

* @author Anyon Zou 

zoujingli@qq.com

>

* @date 2013-08-13 19:30

* @update 2014-10-10 10:10

* @return ]]></description><category></category></item></channel></rss>