-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
169 lines (81 loc) · 65.1 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>PHP用redis解决超卖的问题</title>
<link href="/blog/posts/php-solves-oversell-problem-with-redis/c15f6c4c.html"/>
<url>/blog/posts/php-solves-oversell-problem-with-redis/c15f6c4c.html</url>
<content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>在商品秒杀活动中,比如商品库存只有100,但是在抢购活动中可能有200人同时抢购,这样就出现了并发,在100件商品下单完成库存为0了还有可能继续下单成功,就出现了超卖。</p><p>为了解决这个问题,今天我主要讲一下用redis队列的方式处理。redis有list类型,list类型其实就是一个双向链表。通过lpush,pop操作从链表的头部或者尾部添加删除元素。这使得list即可以用作栈,也可以用作队列。先进先出,一端进,一端出,这就是队列。在队列里前一个走完之后,后一个才会走,所以redis的队列能完美的解决超卖并发的问题。</p><a id="more"></a><p>解决秒杀超卖问题的方法还有比如:1.使用mysql的事务加排他锁来解决;2.使用文件锁实现。3.使用redis的setnx来实现锁机制等。查看点击:<a href="https://www.cnblogs.com/dawuge/p/10480469.html" target="_blank" rel="noopener">避免商品超卖的4种方案</a></p><h2 id="实现原理"><a href="#实现原理" class="headerlink" title="实现原理"></a>实现原理</h2><p>将商品库存循环lpush到num里,然后在下单的时候通过rpop每次取出1件商品,当num的值为0时,停止下单。</p><h2 id="第1步创建表"><a href="#第1步创建表" class="headerlink" title="第1步创建表"></a>第1步创建表</h2><p>一共有三张表,分别是:订单表、商品表、日志表。</p><p><strong>1.订单表</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">CREATE TABLE `ims_order` (</span><br><span class="line"> `id` int(11) NOT NULL AUTO_INCREMENT,</span><br><span class="line"> `order_sn` char(32) NOT NULL,</span><br><span class="line"> `user_id` int(11) NOT NULL,</span><br><span class="line"> `status` int(11) NOT NULL DEFAULT '0',</span><br><span class="line"> `goods_id` int(11) NOT NULL DEFAULT '0',</span><br><span class="line"> `sku_id` int(11) NOT NULL DEFAULT '0',</span><br><span class="line"> `number` int(11) NOT NULL,</span><br><span class="line"> `price` int(10) NOT NULL COMMENT '价格:单位为分',</span><br><span class="line"> `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,</span><br><span class="line"> PRIMARY KEY (`id`)</span><br><span class="line">) ENGINE=InnoDB AUTO_INCREMENT=5820 DEFAULT CHARSET=utf8 COMMENT='订单表'</span><br></pre></td></tr></table></figure><p><strong>2.商品表</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">CREATE TABLE `ims_hotmallstore_goods` (</span><br><span class="line"> `id` int(11) unsigned NOT NULL AUTO_INCREMENT,</span><br><span class="line"> `name` varchar(50) NOT NULL COMMENT '商品名称',</span><br><span class="line"> `type_id` int(11) NOT NULL COMMENT '商品分类',</span><br><span class="line"> `img` text NOT NULL COMMENT '商品图片',</span><br><span class="line"> `money` decimal(10,2) NOT NULL COMMENT '售价',</span><br><span class="line"> `money2` decimal(10,2) NOT NULL COMMENT '原价',</span><br><span class="line"> `is_show` int(11) NOT NULL DEFAULT '1' COMMENT '1.上架2.下架',</span><br><span class="line"> `uniacid` int(11) NOT NULL COMMENT '小程序id',</span><br><span class="line"> `inventory` int(11) NOT NULL COMMENT '库存',</span><br><span class="line"> `details` text NOT NULL COMMENT '详情',</span><br><span class="line"> `store_id` int(11) NOT NULL COMMENT '商家id',</span><br><span class="line"> `sales` int(11) NOT NULL COMMENT '销量',</span><br><span class="line"> `logo` varchar(100) NOT NULL,</span><br><span class="line"> `num` int(11) NOT NULL,</span><br><span class="line"> `is_gg` int(11) NOT NULL DEFAULT '2' COMMENT '是否开启规格',</span><br><span class="line"> PRIMARY KEY (`id`)</span><br><span class="line">) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8</span><br></pre></td></tr></table></figure><p><strong>3.日志表</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">CREATE TABLE `ims_order_log` (</span><br><span class="line"> `id` int(11) NOT NULL AUTO_INCREMENT,</span><br><span class="line"> `status` int(11) NOT NULL DEFAULT '0',</span><br><span class="line"> `msg` text CHARACTER SET utf8,</span><br><span class="line"> `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,</span><br><span class="line"> PRIMARY KEY (`id`),</span><br><span class="line"> KEY `status` (`status`)</span><br><span class="line">) ENGINE=InnoDB AUTO_INCREMENT=4562 DEFAULT CHARSET=gb2312 COMMENT='订单日志表'</span><br></pre></td></tr></table></figure><h2 id="第2步写代码"><a href="#第2步写代码" class="headerlink" title="第2步写代码"></a>第2步写代码</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br></pre></td><td class="code"><pre><span class="line">class Test {</span><br><span class="line"></span><br><span class="line"> private static $instance = null;</span><br><span class="line"></span><br><span class="line"> // 用单列模式 实例化Redis</span><br><span class="line"> public static function Redis()</span><br><span class="line"> {</span><br><span class="line"> if (self::$instance == null) {</span><br><span class="line"> $redis=new \Redis();</span><br><span class="line"> $redis->connect('127.0.0.1',6379);</span><br><span class="line"> self::$instance = $redis;</span><br><span class="line"> }</span><br><span class="line"> return self::$instance;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> // 将商品库存循环到lpush的num里</span><br><span class="line"> public function doPageSaveNum()</span><br><span class="line"> {</span><br><span class="line"> $redis=self::Redis();</span><br><span class="line"> $goods_id=1;</span><br><span class="line"> $sql="select id, num, money from ims_hotmallstore_goods where id=".$goods_id;</span><br><span class="line"> $goods=pdo_fetch($sql);</span><br><span class="line"> if(!empty($goods)){</span><br><span class="line"> for($i=1; $i<=$goods['num']; $i++){</span><br><span class="line"> $redis->lpush('num',$i);</span><br><span class="line"> }</span><br><span class="line"> die('成功!');</span><br><span class="line"> }else{</span><br><span class="line"> $this->echoMsg(0,'商品不存在。');</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> // 抢购下单</span><br><span class="line"> public function doPageGoodsStore()</span><br><span class="line"> { </span><br><span class="line"> $goods_id=1;</span><br><span class="line"> $sql="select id, num, money from ims_hotmallstore_goods where id=".$goods_id;</span><br><span class="line"> $goods=pdo_fetch($sql);</span><br><span class="line"> $redis=self::Redis();</span><br><span class="line"> $count=$redis->rpop('num');//每次从num取出1</span><br><span class="line"> if($count==0){</span><br><span class="line"> $this->echoMsg(0,'no num redis');</span><br><span class="line"> }</span><br><span class="line"> $this->doPageGoodsOrder($goods,1);</span><br><span class="line"> </span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> // 保存日志</span><br><span class="line"> public function echoMsg($status,$msg,$_data="")</span><br><span class="line"> { </span><br><span class="line"> </span><br><span class="line"> $data=json_encode(array('status'=>$status,'msg'=>$msg,'data'=>$_data),JSON_UNESCAPED_UNICODE);</span><br><span class="line"> $order_log['status']=$status;</span><br><span class="line"> $order_log['msg']=$msg;</span><br><span class="line"> $order_log['create_time']=time();</span><br><span class="line"> pdo_insert('order_log',$order_log);</span><br><span class="line"> die($data);</span><br><span class="line"> }</span><br><span class="line"> public function orderNo()</span><br><span class="line"> {</span><br><span class="line"> return date('ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8); </span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> // 下单更新库存</span><br><span class="line"> public function doPageGoodsOrder($goods,$goods_number)</span><br><span class="line"> { </span><br><span class="line"> $orderNo=$this->orderNo();</span><br><span class="line"> $number=$goods['num']-$goods_number;</span><br><span class="line"> if($number<0){</span><br><span class="line"> $this->echoMsg(0,'已没有库存');</span><br><span class="line"> }</span><br><span class="line"> $user_id=rand(1,500);</span><br><span class="line"> $order['user_id']=$user_id;</span><br><span class="line"> $order['goods_id']=$goods['id'];</span><br><span class="line"> $order['number']=$goods_number;</span><br><span class="line"> $order['price']=$goods['money'];</span><br><span class="line"> $order['status']=1;</span><br><span class="line"> $order['sku_id']=2;</span><br><span class="line"> $order['order_sn']=$orderNo;</span><br><span class="line"> $order['create_time']=date('Y-m-d H:i:s');</span><br><span class="line"> pdo_insert('order',$order);</span><br><span class="line"> $sql="update ims_hotmallstore_goods set num=num-".$goods_number." where num>0 and id=".$goods['id'];</span><br><span class="line"> $res=pdo_query($sql);</span><br><span class="line"> if(!empty($res)){</span><br><span class="line"> $this->echoMsg(1,'库存扣减成功'.$number);</span><br><span class="line"> }</span><br><span class="line"> $redis=self::Redis();</span><br><span class="line"> $redis->lpush('num',$goods_number);</span><br><span class="line"> $this->echoMsg(0,'库存扣减失败'.$number);</span><br><span class="line"></span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line">// 调用--将商品库存循环到lpush的num里</span><br><span class="line">if($_GET['i']==1){</span><br><span class="line"> $model = new Test;</span><br><span class="line"> $model->doPageSaveNum();</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">// 调用--高并发抢购下单</span><br><span class="line">if($_GET['i']==2){</span><br><span class="line"> $model = new Test;</span><br><span class="line"> $model->doPageGoodsStore();</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="第3步并发测试"><a href="#第3步并发测试" class="headerlink" title="第3步并发测试"></a>第3步并发测试</h2><p>1.先手动执行:<code>http://127.0.0.1/wqchunjingsvn/web/index.php?i=1</code>,将商品库存循环保存到lpush的num里。</p><p>2.这里我用Apache的ab测试,安装方法本文最后做补充。打开终端,然后执行:<code>ab -n 1000 -c 200 http://127.0.0.1/wqchunjingsvn/web/index.php?i=2</code><br>(-n发出1000个请求,-c模拟200并发,请求数要大于或等于并发数。相当1000人同时访问,后面是测试url )</p><p>3.观察是否执行成功,执行结果如下图,说明执行成功。</p><p><img src="https://image-static.segmentfault.com/332/173/332173830-5d7f1529c28b4_articlex" alt="clipboard.png"></p><h2 id="第4步查看数据表"><a href="#第4步查看数据表" class="headerlink" title="第4步查看数据表"></a>第4步查看数据表</h2><p>1.查看订单表,总订单数量为100,如下图,没问题。</p><p><img src="https://image-static.segmentfault.com/359/758/3597583606-5d7f13331ad03_articlex" alt="clipboard.png"></p><p>2.查看商品库存,已经由原来的100变成0,也没问题。</p><p><img src="https://image-static.segmentfault.com/163/423/1634239958-5d7f1371012a0_articlex" alt="clipboard.png"></p><p>3.查看日志表,总共137条记录,其中status为1的只有100条,也没问题。</p><p><img src="https://image-static.segmentfault.com/301/383/3013831803-5d7f13f165829_articlex" alt="clipboard.png"></p><p><img src="https://image-static.segmentfault.com/586/457/586457473-5d7f14101e47a_articlex" alt="clipboard.png"></p><h2 id="总结分析"><a href="#总结分析" class="headerlink" title="总结分析"></a>总结分析</h2><p>1.方案可行,库存为0,没有出现超卖。</p><p>2.用Apache的ab测试高并发时需要注意Url地址不能拼接上带&号的参数,否则执行失败。</p><h2 id="相关资料"><a href="#相关资料" class="headerlink" title="相关资料"></a>相关资料</h2><p><a href="https://blog.csdn.net/Srodong/article/details/88656214" target="_blank" rel="noopener">php下用redis解决秒杀超卖问题</a><br><a href="https://www.cnblogs.com/wenbochang/p/10912459.html" target="_blank" rel="noopener">如何解决高并发秒杀的超卖问题</a><br><a href="https://www.jianshu.com/p/c952f67fe008" target="_blank" rel="noopener">Mac 安装Apache http 服务器(用Apache的ab测试,安装方法)</a><br><a href="https://www.cnblogs.com/TingJie/articles/4974885.html" target="_blank" rel="noopener">使用ab进行压力测试详解</a><br><a href="https://www.cnblogs.com/tao_/p/9537666.html" target="_blank" rel="noopener">mysql并发更新</a></p>]]></content>
<categories>
<category> 文章 </category>
</categories>
<tags>
<tag> redis </tag>
<tag> java </tag>
<tag> php </tag>
</tags>
</entry>
<entry>
<title>Mac下redis扩展安装与使用</title>
<link href="/blog/posts/extended-installation-and-use-of-redis-under-mac/9a1d7418.html"/>
<url>/blog/posts/extended-installation-and-use-of-redis-under-mac/9a1d7418.html</url>
<content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型,并提供多种语言的API。<br>mac本身自带有php环境,但是并没有安装redis扩展,需要我们单独安装,下面我说下安装的步骤,以及需要注意的地方。</p><a id="more"></a><h2 id="下载redis"><a href="#下载redis" class="headerlink" title="下载redis"></a>下载redis</h2><p>在安装redis前需要先下载redis,可到redis官网下载,这里我提供个下载地址:<a href="http://download.redis.io/releases/redis-5.0.5.tar.gz" target="_blank" rel="noopener">redis-5.0.5下载</a></p><h2 id="安装与启动redis"><a href="#安装与启动redis" class="headerlink" title="安装与启动redis"></a>安装与启动redis</h2><p>1、将下载好的redis解压到/usr/local目录下,运行命令:<code>tar -zxvf redis-5.0.5.tar.gz -C /usr/local/redis-5.0.5</code></p><p>2、终端进入解压后的根目录:<code>cd /usr/local/redis-5.0.5</code></p><p>3、测试编译:<code>sudo make test</code> </p><p>4、安装redis:<code>sudo make install</code></p><p>如果在第4步测试时报如下错:</p><p>Executing test client: couldn’t execute “src/redis-benchmark”: no such file or directory.</p><p>则执行以下两个步骤</p><p>(1)、<code>sudo make distclean</code></p><p>(2)、<code>sudo make</code></p><p>5、配置<br> 上面安装成功后,去配置php.ini文件:<br> extension_dir = “/usr/lib/php/extensions/no-debug-non-zts-20131226/“ </p><p>//这里的地址是你的reids安装好redis.so的位置。</p><p> extension = redis.so</p><p>6、打印输出phpinfo()看看有没有安装成功,如能看到如下图信息则说明安装成功。</p><p><img src="https://image-static.segmentfault.com/105/598/10559850-5d7dbe767df0f_articlex" alt="clipboard.png"></p><p>(检查redis是否安装成功:亦可在安装完成执行make test,出现【\o/ All tests passed without errors!】【Cleanup: may take some time… OK】说明redis安装成功。)</p><p>7、修改redis根目录的redis.conf中【daemonize no】为【daemonize yes】启动以后台运行模式</p><p>8、启动redis在redis根目录执行命令:./src/redis-server ./redis.conf,停止redis服务可以执行客户端命令:./src/redis-cli shutdown</p><p>9、登陆客户端命令为:[./src/redis-cli]或[./src/redis-cli -p 6379]或[telnet 127.0.0.1 6379],在redis安装文件夹的根目录执行。</p><h2 id="测试redis"><a href="#测试redis" class="headerlink" title="测试redis"></a>测试redis</h2><p>在完成安装与启动redis后,登录客户端就可以测试redis了。<br>示例:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">127.0.0.1:6379> set key "success" //写入数据</span><br><span class="line">OK</span><br><span class="line">127.0.0.1:6379> get key //读取数据</span><br><span class="line">"success"</span><br><span class="line">127.0.0.1:6379></span><br></pre></td></tr></table></figure><h2 id="问题汇总"><a href="#问题汇总" class="headerlink" title="问题汇总"></a>问题汇总</h2><p><strong>1、sudo make install时提示</strong></p><p>Installing shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20131226/<br>cp: /usr/lib/php/extensions/no-debug-non-zts-20131226/#INST@12567#: Operation not permitted<br>make: *** [install-modules] Error 1</p><p>解决方案:<a href="https://blog.csdn.net/moliyiran/article/details/78816291" target="_blank" rel="noopener">mac php安装扩展 make install not permit</a></p><p><strong>2、安装好后,配置php.ini文件</strong></p><p>在文件中增加了 extension=redis.so ,测试redis时,发现并没有出来。</p><p>解决方案:<br>extension_dir = “/usr/local/php/lib/php/extensions/no-debug-zts-20090626” #地址中写 make install 返回的地址</p><p>extension=redis.so</p><h2 id="相关资料"><a href="#相关资料" class="headerlink" title="相关资料"></a>相关资料</h2><p><a href="https://www.cnblogs.com/the-fool/p/11054061.html" target="_blank" rel="noopener">Mac下安装redis5.0 与命令</a><br><a href="http://www.aiuxian.com/article/p-2288714.html" target="_blank" rel="noopener">redis安装配置</a><br><a href="https://www.cnblogs.com/hsd1727728211/p/redis.html" target="_blank" rel="noopener">【redis】mac下redis扩展安装与遇到的坑汇</a><br><a href="https://www.jianshu.com/p/8b66def964ed" target="_blank" rel="noopener">MAMP安装redis</a></p>]]></content>
<categories>
<category> 文章 </category>
</categories>
<tags>
<tag> redis </tag>
<tag> java </tag>
<tag> php </tag>
</tags>
</entry>
<entry>
<title>Markdown的基本语法</title>
<link href="/blog/posts/basic-grammar-of-markdown/f90e5018.html"/>
<url>/blog/posts/basic-grammar-of-markdown/f90e5018.html</url>
<content type="html"><</span><br><span class="line"></span><br><span class="line">图片alt就是显示在图片下面的文字,相当于对图片内容的解释。</span><br><span class="line">图片title是图片的标题,当鼠标移到图片上时显示的内容。title可加可不加</span><br></pre></td></tr></table></figure><p>示例:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"></span><br></pre></td></tr></table></figure><p>效果如下:</p><p><img src="http://hbimg.huabanimg.com/970b7624408a70f3912977a02ec47b138995c1a55da9-soNZq3_fw658" alt="blockchain" title="github logo"></p><p><strong>上传本地图片直接点击导航栏的图片标志,选择图片即可</strong></p><h2 id="六、超链接"><a href="#六、超链接" class="headerlink" title="六、超链接"></a>六、超链接</h2><p>语法:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[超链接名](超链接地址 "超链接title")</span><br><span class="line">title可加可不加</span><br></pre></td></tr></table></figure><p>示例:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[简书](http://jianshu.com)</span><br><span class="line">[百度](http://baidu.com)</span><br></pre></td></tr></table></figure><p>效果如下:</p><p><a href="https://www.jianshu.com/u/1f5ac0cf6a8b" target="_blank" rel="noopener">简书</a><br><a href="http://baidu.com/" target="_blank" rel="noopener">百度</a></p><p>注:Markdown本身语法不支持链接在新页面中打开,貌似简书做了处理,是可以的。别的平台可能就不行了,如果想要在新页面中打开的话可以用html语言的a标签代替。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><a href="超链接地址" target="_blank">超链接名</a></span><br><span class="line"></span><br><span class="line">示例</span><br><span class="line"><a href="https://www.jianshu.com/u/1f5ac0cf6a8b" target="_blank">简书</a></span><br></pre></td></tr></table></figure><h2 id="七、列表"><a href="#七、列表" class="headerlink" title="七、列表"></a>七、列表</h2><h5 id="1、无序列表"><a href="#1、无序列表" class="headerlink" title="1、无序列表"></a>1、无序列表</h5><p>语法:<br> 无序列表用 - + * 任何一种都可以</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">- 列表内容</span><br><span class="line">+ 列表内容</span><br><span class="line">* 列表内容</span><br><span class="line"></span><br><span class="line">注意:- + * 跟内容之间都要有一个空格</span><br></pre></td></tr></table></figure><p>效果如下:</p><ul><li><p>列表内容</p></li><li><p>列表内容</p></li><li><p>列表内容</p></li></ul><h5 id="2、有序列表"><a href="#2、有序列表" class="headerlink" title="2、有序列表"></a>2、有序列表</h5><p>语法:<br> 数字加点</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">1.列表内容</span><br><span class="line">2.列表内容</span><br><span class="line">3.列表内容</span><br><span class="line"></span><br><span class="line">注意:序号跟内容之间要有空格</span><br></pre></td></tr></table></figure><p>效果如下:</p><p>1.列表内容<br> 2.列表内容<br> 3.列表内容</p><h5 id="3、列表嵌套"><a href="#3、列表嵌套" class="headerlink" title="3、列表嵌套"></a>3、列表嵌套</h5><p><strong>上一级和下一级之间敲三个空格即可</strong></p><ul><li>一级无序列表内容<ul><li>二级无序列表内容</li><li>二级无序列表内容</li><li>二级无序列表内容</li></ul></li><li>一级无序列表内容<ol><li>二级有序列表内容</li><li>二级有序列表内容</li><li>二级有序列表内容</li></ol></li></ul><ol><li>一级有序列表内容<ul><li>二级无序列表内容</li><li>二级无序列表内容</li><li>二级无序列表内容</li></ul></li><li>一级有序列表内容<ol><li>二级有序列表内容</li><li>二级有序列表内容</li><li>二级有序列表内容</li></ol></li></ol><h2 id="八、表格"><a href="#八、表格" class="headerlink" title="八、表格"></a>八、表格</h2><p>语法:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">表头|表头|表头</span><br><span class="line">---|:--:|---:</span><br><span class="line">内容|内容|内容</span><br><span class="line">内容|内容|内容</span><br><span class="line"></span><br><span class="line">第二行分割表头和内容。</span><br><span class="line">- 有一个就行,为了对齐,多加了几个</span><br><span class="line">文字默认居左</span><br><span class="line">-两边加:表示文字居中</span><br><span class="line">-右边加:表示文字居右</span><br><span class="line">注:原生的语法两边都要用 | 包起来。此处省略</span><br></pre></td></tr></table></figure><p>示例:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">姓名|技能|排行</span><br><span class="line">--|:--:|--:</span><br><span class="line">张三|php|高级</span><br><span class="line">李四|vue|中级</span><br><span class="line">大一|小程序|中级</span><br></pre></td></tr></table></figure><p>效果如下:</p><table><thead><tr><th>姓名</th><th align="center">技能</th><th align="right">排行</th></tr></thead><tbody><tr><td>张三</td><td align="center">Php</td><td align="right">高级</td></tr><tr><td>李四</td><td align="center">Vue</td><td align="right">中级</td></tr><tr><td>大一</td><td align="center">小程序</td><td align="right">中级</td></tr></tbody></table><h2 id="九、代码"><a href="#九、代码" class="headerlink" title="九、代码"></a>九、代码</h2><p>语法:<br> 单行代码:代码之间分别用一个反引号包起来</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">`代码内容`</span><br></pre></td></tr></table></figure><p>代码块:代码之间分别用三个反引号包起来,且两边的反引号单独占一行</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">(```)</span><br><span class="line"> 代码...</span><br><span class="line"> 代码...</span><br><span class="line"> 代码...</span><br><span class="line">(```)</span><br></pre></td></tr></table></figure><blockquote><p>注:为了防止转译,前后三个反引号处加了小括号,实际是没有的。这里只是用来演示,实际中去掉两边小括号即可。</p></blockquote><p>示例:</p><p>单行代码</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">`create database hero;`</span><br></pre></td></tr></table></figure><p>代码块</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">(```)</span><br><span class="line"> function fun(){</span><br><span class="line"> echo "这是一句非常牛逼的代码";</span><br><span class="line"> }</span><br><span class="line"> fun();</span><br><span class="line">(```)</span><br></pre></td></tr></table></figure><p>效果如下:</p><p>单行代码</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">create database hero;</span><br></pre></td></tr></table></figure><p>代码块</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">function fun(){</span><br><span class="line"> echo "这是一句非常牛逼的代码";</span><br><span class="line">}</span><br><span class="line">fun();</span><br></pre></td></tr></table></figure><h2 id="十、流程图"><a href="#十、流程图" class="headerlink" title="十、流程图"></a>十、流程图</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">```flow</span><br><span class="line">st=>start: 开始</span><br><span class="line">op=>operation: My Operation</span><br><span class="line">cond=>condition: Yes or No?</span><br><span class="line">e=>end</span><br><span class="line">st->op->cond</span><br><span class="line">cond(yes)->e</span><br><span class="line">cond(no)->op</span><br><span class="line">&</span><br></pre></td></tr></table></figure><p>```</p><p>效果如下:<br><img src="https://upload-images.jianshu.io/upload_images/6860761-9d9524ba31047696.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/751/format/webp" alt="流程图"></p><h2 id="十一、相关资料"><a href="#十一、相关资料" class="headerlink" title="十一、相关资料"></a>十一、相关资料</h2><p><a href="https://www.jianshu.com/p/191d1e21f7ed" target="_blank" rel="noopener">Markdown基本语法</a></p>]]></content>
<categories>
<category> 文章 </category>
</categories>
<tags>
<tag> markdown </tag>
</tags>
</entry>
<entry>
<title>PHP相关</title>
<link href="/blog/posts/php-related/8312a20a.html"/>
<url>/blog/posts/php-related/8312a20a.html</url>
<content type="html"><![CDATA[<h2 id="一、使用Navicat连接阿里云ECS服务器上的MySQL数据库"><a href="#一、使用Navicat连接阿里云ECS服务器上的MySQL数据库" class="headerlink" title="一、使用Navicat连接阿里云ECS服务器上的MySQL数据库"></a>一、使用Navicat连接阿里云ECS服务器上的MySQL数据库</h2><p><a href="https://blog.csdn.net/sunyuhua_keyboard/article/details/80798900" target="_blank" rel="noopener">1、navicat 连接阿里云RDS的设置</a></p><p><a href="https://blog.csdn.net/nw_ningwang/article/details/76218997" target="_blank" rel="noopener">2、使用Navicat连接阿里云ECS服务器上的MySQL数据库</a></p><a id="more"></a><h2 id="二、Navicat导入csv乱码以及导出乱码问题解决办法"><a href="#二、Navicat导入csv乱码以及导出乱码问题解决办法" class="headerlink" title="二、Navicat导入csv乱码以及导出乱码问题解决办法"></a>二、Navicat导入csv乱码以及导出乱码问题解决办法</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">1、导入csv出现乱码</span><br><span class="line">1.1、把数据库连接编码(Encoding)设置成gb2312;</span><br><span class="line">1.2、导入csv数据,显示正常(可选加上id字段并设置自增长);</span><br><span class="line">1.3、把刚导入的表执行导出sql文件;</span><br><span class="line">1.4、用Sublime Text打开sql文件是乱码。执行这个操作转换成gbk格式编码:File->Reload with Encoding->Chinese Simplifild(GBK),显示正常;</span><br><span class="line">1.5、把需要改的表名,字段,自增长id起始值等等改了之后,继续用Sublime Text新建一个文本文档(Text):File->New File,把改好的sql文件内容复制粘贴到这个新建的文本文档里,保存:File->Save With Encoding->UTF-8->Save;</span><br><span class="line">1.6、把数据库连接编码(Encoding)设置回Auto;</span><br><span class="line">1.7、把新的sql文件导入,中文乱码解决;</span><br><span class="line"></span><br><span class="line">2、导出csv乱码</span><br><span class="line">2.1、导出csv乱码可以换个格式导出,比如导出xlsx或xls都是可以正常显示的;</span><br></pre></td></tr></table></figure><h2 id="三、把编辑器上传图片的src-base64-decode解析上传的方法"><a href="#三、把编辑器上传图片的src-base64-decode解析上传的方法" class="headerlink" title="三、把编辑器上传图片的src base64_decode解析上传的方法"></a>三、把编辑器上传图片的src base64_decode解析上传的方法</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line">注意:必须用file_put_contents写入文件上传的方式,move_uploaded_file函数不支持图像类型上传;</span><br><span class="line"> public function actionUeditorUpload()</span><br><span class="line"> {</span><br><span class="line"> $post=Yii::$app->request->post();</span><br><span class="line"> if(!empty($post['IMGSRC'])){</span><br><span class="line"> $img_src=explode(',', $post['IMGSRC']); //获取图片base64编码</span><br><span class="line"> $_img=explode(':', $img_src[0]); </span><br><span class="line"> $_img1=explode(';', $_img[1]);</span><br><span class="line"> $img_type=explode('/', $_img1[0]); //获取图片后缀</span><br><span class="line"></span><br><span class="line"> $tmp_name = base64_decode($img_src[1]); //base64转码获取图片</span><br><span class="line"></span><br><span class="line"> $IMG ="";</span><br><span class="line"> $name = $tmp_name;</span><br><span class="line"> $randName = time() . rand(1000, 9999) . "." . $img_type[1];</span><br><span class="line"> $move_Path = \Yii::getAlias('@api/web/upload/accessory/'.$randName);</span><br><span class="line"></span><br><span class="line"> if (file_put_contents($move_Path,$name)) </span><br><span class="line"> {</span><br><span class="line"> $IMG = '/upload/accessory/'.$randName;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> return ['IMGSRC'=>'http://'.$_SERVER['HTTP_HOST'].$IMG];</span><br><span class="line"></span><br><span class="line"> }else{</span><br><span class="line"> return ErrorMsg::Info("数据错误。");</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="四、php-curl-post请求参数转为x-www-form-urlencoded方式"><a href="#四、php-curl-post请求参数转为x-www-form-urlencoded方式" class="headerlink" title="四、php curl post请求参数转为x-www-form-urlencoded方式"></a>四、php curl post请求参数转为x-www-form-urlencoded方式</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">1、网上转变的方法基本都是写添加下面这句:</span><br><span class="line">curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));</span><br><span class="line">但加上去后却根本没效果。</span><br><span class="line">2、要想以 x-www-form-urlencoded 方式发送,最关键其实是发送的数据格式。</span><br><span class="line">方式from-data试发送的数据用的是array格式,而方式为 x-www-form-urlencoded 时需要用key=value&key=value的格式发送,发送的是string型的数据。</span><br><span class="line">from-data数据的为:</span><br><span class="line">$data = [</span><br><span class="line"> 'name' => 'xiaoming',</span><br><span class="line"> 'sex' => 1</span><br><span class="line">];</span><br><span class="line">x-www-form-urlencoded时的数据则要变为</span><br><span class="line">http_build_query($data);</span><br><span class="line">作用是模拟http请求,把得到的数据data通过函数URL-encode。</span><br></pre></td></tr></table></figure><h2 id="五、curl执行接口地址上的参数要用sprintf函数对字符串格式化,否则可能会出现接口接收时异常。"><a href="#五、curl执行接口地址上的参数要用sprintf函数对字符串格式化,否则可能会出现接口接收时异常。" class="headerlink" title="五、curl执行接口地址上的参数要用sprintf函数对字符串格式化,否则可能会出现接口接收时异常。"></a>五、curl执行接口地址上的参数要用sprintf函数对字符串格式化,否则可能会出现接口接收时异常。</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">$data['requestTime']=date('YmdHis', time());</span><br><span class="line"> $sign_data_str = sprintf('key=%s&requestTime=%s&secret=%s&version=%s&serviceType=%s&data=%s',</span><br><span class="line"> $data['key'], $data['requestTime'], $data['secret'], $data['version'], $data['serviceType'], $data['data']</span><br><span class="line"> );</span><br><span class="line"> $sign = md5($sign_data_str); </span><br><span class="line"> return ['sign_data_str'=>$sign_data_str,'sign'=>$sign];</span><br></pre></td></tr></table></figure><h2 id="六、个推向指定用户推送,可以用别名实现"><a href="#六、个推向指定用户推送,可以用别名实现" class="headerlink" title="六、个推向指定用户推送,可以用别名实现"></a>六、个推向指定用户推送,可以用别名实现</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">1、个推有别名绑定接口,你登入账号的时候调用绑定接口,那么登入的账号就和设备推送的cid绑定了,多账号登录同一设备绑定,以最新的为准,前面绑定的会被替换掉。 服务端推送上传别名,那么只有与上传别名绑定的客户端设备cid才会收到。</span><br><span class="line">2、Alias是别名,可以随便定义,可以用用户id。clientid是客户端sdk成功注册个推服务之后个推服务器分配给客户端的,不可以自己定义的。</span><br><span class="line">参考地址:http://docs.getui.com/getui/server/php/interface/</span><br><span class="line">3、个推的PHP demo,本地下载测试推送app收到两条通知的话,线上再试试。</span><br></pre></td></tr></table></figure><h2 id="七、使用move-uploaded-file函数上传图片或文件到项目目录里的一些问题和排查思路"><a href="#七、使用move-uploaded-file函数上传图片或文件到项目目录里的一些问题和排查思路" class="headerlink" title="七、使用move_uploaded_file函数上传图片或文件到项目目录里的一些问题和排查思路"></a>七、使用move_uploaded_file函数上传图片或文件到项目目录里的一些问题和排查思路</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">1、move_uploaded_file函数上传失败</span><br><span class="line">排查思路:</span><br><span class="line">(1)、检查文件大小以和文件类型是否符合设置的规定;</span><br><span class="line">(2)、检查上传目录是否已存在或者是否给了最大权限;</span><br><span class="line">(3)、检查php.ini配置文件upload_max_filesize和memory_limit的设置</span><br><span class="line"> 这里给个值upload_max_filesize=50M;memory_limit=128M;</span><br><span class="line"></span><br><span class="line">2、imagecreatetruecolor函数图片太大时生成图像失败?</span><br><span class="line">一张34KB大小像素为720 x 405的图片上传经过imagecreatetruecolor函数生成缩略图没有任何问题,</span><br><span class="line">另一张3M大小像素为4032 x 3024的图片上传走到imagecreatetruecolor函数时却失败了,打印空白,没有错误提示。</span><br><span class="line">原因:是图像尺寸太大服务器运行内存不够造成的,在imagecreatetruecolor函数前放上如下两行代码,修改运存为512M,问题解决。</span><br><span class="line">ini_set('max_execution_time', '0');</span><br><span class="line">//修改此次最大运行内存</span><br><span class="line">ini_set('memory_limit','512M');</span><br></pre></td></tr></table></figure><h2 id="八、PHP获取数组中重复的值"><a href="#八、PHP获取数组中重复的值" class="headerlink" title="八、PHP获取数组中重复的值"></a>八、PHP获取数组中重复的值</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">$array=array(23,128,22,81,123,132,134,131,133,138,150,51,38,142,144,26,80,146,22,108,54,59,77,104,121,126,130,25,32,40,130);</span><br><span class="line"> // 获取去掉重复数据的数组 </span><br><span class="line"> $unique_arr = array_unique($array); </span><br><span class="line"> // 获取重复数据的数组 </span><br><span class="line"> $repeat_arr = array_diff_assoc($array, $unique_arr); </span><br><span class="line"> var_export($repeat_arr);exit;</span><br></pre></td></tr></table></figure>]]></content>
<categories>
<category> 知识 </category>
</categories>
<tags>
<tag> php </tag>
<tag> 编程 </tag>
</tags>
</entry>
<entry>
<title>Linux日常笔记</title>
<link href="/blog/posts/linux-daily-notes/6a805780.html"/>
<url>/blog/posts/linux-daily-notes/6a805780.html</url>
<content type="html"><![CDATA[<h2 id="一、git操作笔记"><a href="#一、git操作笔记" class="headerlink" title="一、git操作笔记"></a>一、git操作笔记</h2><p>1、git config core.ignorecase false是修改当前的项目设置为不忽略大小写,git config –global core.ignorecase false设置全局都不忽略大小写。</p><p>2、git status中出现的untracked files文件忽略方法:</p><a id="more"></a><p>比如要忽略如下untracked files的文件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">.deploy_git/</span><br><span class="line">node_modules/cliui/</span><br><span class="line">public/img/avatar_1.png</span><br><span class="line">public/search.xml</span><br></pre></td></tr></table></figure><p>在根目录建立.gitgnore文件<br>配置如下代码即可</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">.deploy_git/</span><br><span class="line">node_modules/</span><br><span class="line">public/</span><br></pre></td></tr></table></figure><p>3、<a href="https://blog.csdn.net/themagickeyjianan/article/details/79683980" target="_blank" rel="noopener">修改git config配置文件</a></p><p>4、Error: Not Found问题 :owner或者repo配置错误了,注意名字和仓库名字的大小写。</p><p>5、查看console报:This request has been blocked; the content must be served over HTTPS.<br> <a href="https://blog.csdn.net/xiaoxing598/article/details/49360643" target="_blank" rel="noopener">解决方式:</a><br> 在头部加入这么一行代码就行(这是目前我用的方式):</p><meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> 原因是:HTTPS 是 HTTP over Secure Socket Layer,以安全为目标的 HTTP 通道,所以在 HTTPS 承载的页面上不允许出现 http 请求,一旦出现就是提示或报错这个错误:This request has been blocked; the content must be served over HTTPS.<p> 很多运营对 https 没有技术概念,在填入的数据中不免出现 http 的资源,体系庞大,出现疏忽和漏洞也是不可避免的。<br> CSP设置upgrade-insecure-requests<br> 好在 W3C 工作组考虑到了我们升级 HTTPS 的艰难,在 2015 年 4 月份就出了一个 <a href="http://www.w3.org/TR/mixed-content/" target="_blank" rel="noopener">Upgrade Insecure Requests 的草案</a>,他的作用就是让浏览器自动升级请求。</p><pre><code>在我们服务器的响应头中加入:header("Content-Security-Policy: upgrade-insecure-requests");我们的页面是 https 的,而这个页面中包含了大量的 http 资源(图片、iframe等),页面一旦发现存在上述响应头,会在加载 http 资源时自动替换成 https 请求。当然,如果我们不方便在服务器/Nginx 上操作,也可以在页面中加入 meta 头:<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />目前支持这个设置的还只有 chrome 43.0,不过我相信,CSP 将成为未来 web 前端安全大力关注和使用的内容。而 upgrade-insecure-requests 草案也会很快进入 RFC 模式。从 W3C 工作组给出的 example(http://www.w3.org/TR/upgrade-insecure-requests/#examples),可以看出,这个设置不会对外域的 a 链接做处理,所以可以放心使用。</code></pre><p>6、git新文件夹无法识别出来,执行git add –all报【git】warning: adding embedded git repository的错误<br> 解决办法:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">1、在新文件夹下执行find . -name ".git" | xargs rm -Rf</span><br><span class="line">2、再次执行git add --all 不报错了</span><br></pre></td></tr></table></figure><p> 原因是:当前目录下面有.git文件夹——默认是隐藏的,直接将.git文件夹干掉即可</p><p>7、fatal: Not a git repository (or any of the parent directories): .git—-在当前指向的文件夹里找不到库(.git文件夹)<br> 原因可能是:<br> (1)不小心删了.git文件夹(这个文件夹通常是隐藏的)<br> (2)根本没创建版本库<br> (3)当前指向的文件夹不是之前创建版本库的文件夹(这种情况通常发生在之前用过$ cd 命令然后结束工作重启)<br> 解决方法:<br> (1),(2)的解决方法是用$ git init重新建一个版本库<br> (3)的解决方法是用$ cd “文件夹名称”转到原先的文件夹里,可以先用$ pwd看看当前指向的文件夹(或者在想创建版本库的文件夹上右键选中“git”)</p><p>8、<a href="https://www.cnblogs.com/huey/p/5091656.html" target="_blank" rel="noopener">Git CMD - push: Update remote refs along with associated objects</a></p><p>9、如何解决failed to push some refs to git<br> 在使用git 对源代码进行push到gitHub时可能会出错,信息 提示:failed to push some refs to git<br> 原因是:github中的README.md文件不在本地代码目录中<br> 解决办法:<br> 可以通过如下命令进行代码合并【注:pull=fetch+merge]<br> git pull –rebase origin master<br> 执行上面命令行后可以看到本地代码库中多了README.md文件<br> 此时再执行语句 git push -u origin master即可完成代码上传到github</p><p>10、SourceTree 提交项目到码云<br> (1)在码云上创建仓库,获取项目仓库地址<br> (2)sourcetree<br> (2.1)文件->新建/克隆->从URL克隆<br> 源URL:存放码云仓库的绝对路径<br> 目标路径:本地新建项目文件夹,选择根路径<br> 名称:自定义<br> (3)项目上传:把项目源码放入新家文件夹中,选择提交上传功能。</p><p> 附:<a href="https://www.cnblogs.com/amybathory/p/10729457.html" target="_blank" rel="noopener">使用git将代码上传到码云</a><br> <a href="https://www.jianshu.com/p/434b10c7f112" target="_blank" rel="noopener">解决sourcetree连接码云失败 Warning: Permanently added the ECDSA host key for IP address ‘218.11.0.86’ …</a></p><p>11、<a href="https://www.cnblogs.com/e0yu/p/9828520.html" target="_blank" rel="noopener">you do not have permission to pull from the repository解决方法</a></p><h2 id="二、Mac操作笔记"><a href="#二、Mac操作笔记" class="headerlink" title="二、Mac操作笔记"></a>二、Mac操作笔记</h2><p>1、<a href="https://www.jianshu.com/p/ba6c32598d91" target="_blank" rel="noopener">Mac终端iTerm2出现session ended解决办法</a></p><h2 id="三、Web端笔记"><a href="#三、Web端笔记" class="headerlink" title="三、Web端笔记"></a>三、Web端笔记</h2><p><a href="https://blog.csdn.net/a386139471/article/details/79978198" target="_blank" rel="noopener">关于Google浏览器控制台报failed to load resource : net :: ERR_CONNECTION_RESET导致页面加载异常的问题 </a></p>]]></content>
<categories>
<category> 知识 </category>
</categories>
<tags>
<tag> linux </tag>
<tag> 编程 </tag>
</tags>
</entry>
<entry>
<title>你好</title>
<link href="/blog/posts/index/50a2b841.html"/>
<url>/blog/posts/index/50a2b841.html</url>
<content type="html"><![CDATA[<p>欢迎来到ZackLee的个人博客。</p>]]></content>
<categories>
<category> 文章 </category>
</categories>
<tags>
<tag> 开发者 </tag>
</tags>
</entry>
</search>