微信小程序之wx.chooseAddress

微信小程序之wx.chooseAddress

之前帮一个客户弄一个电商项目,说可以去用户的共享地址,当时我就觉得有点蒙了,毕竟我是做后台的,所以比较少接触小程序,在做的时候遇到问题就百度,原来小程序有个内置的api收货地址接口,wx.chooseAddress(OBJECT)(个人觉还是自己开发收货地址比较爽,比较有感觉)1、代码如下:if(wx.chooseAddress){ wx.chooseAddress({ success: function (res) { console.log(JSON.stringify(res)) }, fail: function(err){ console.log(JSON.stringify(err)) } })}else{ console.log('当前微信版本不支持chooseAddress');}以下是调起该接口返回的页面选中地址返回的结果

  • tiedong
  • 前端
  • 2018-08-09 15:31:00
  • 802

什么是web标准、可用性、可访问性

什么是web标准、可用性、可访问性

前言:大家不难发现,只要是招聘UED相关的岗位,如前端开发工程师、交互设计师、用户研究员甚至视觉设计师,一般都对web标准、可用性和可访问性的理解有要求。那么到底什么是web标准、可用性、可访问性呢?一、web标准 简单的说,就是HTML、CSS、JavaScript这三者分离。WEB标准不是某一个标准,而是一系列标准的集合。网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。对应的标准也分三方面:结构化标准语言主要包括XHTML和XML,表现标准语言主要包括CSS,行为标准主要包括对象模型(如 W3C DOM)、ECMAScript等。 web标准的优点:     代码的效率:在HTML文件中使用最精简的代码,而把样式和页面布局信息包含进CSS文件中。则放在服务器上的文件越小,下载文件需要的时间就越短。     易于维护:页面的样式和布局信息保存在单独的CSS文件中,如果你想改变站点的外观时,仅需要在单独的CSS文件中做出更改即可。整站统一css则可带来巨大的便利。     可访问性:上网用户中那些视力受损的人,通过屏幕阅读器使用键盘命令将网页的内容读给他们听。以语义化的HTML(结构和表现相分离的HTML)编写的网页文件,就可以让此类用户更容易导航,且网页文件中的重要信息也更有可能被这些用户找到。     设备兼容性:纯HTML,无附加样式信息,可以针对具有不同特点(如屏幕尺寸等)的设备而被重新格式化,只需要引用一套另外的样式表即可。同时,CSS本身也可以让你为不同的呈现方式和媒体类型(如在屏幕上阅读网页,打印网页,在移动设备上阅读网页等)规定不同的样式表。     网络爬虫/搜索引擎:搜索引擎使用“爬虫”,解析你的网页。语义化的HTML能更准确更快速的被解析,从而知道哪些才是重要的内容,那么你的网页在搜索结果中的排名就会大受影响。 二、可用性、可访问性     可访问性就是对所有人一视同仁,无论他们是否有残障。 网站的用户类型:     身体健康的用户;     盲人或严重视觉障碍者,他们使用屏幕阅读器来听取网站,或者通过点字显示器来感知网页;     近视者,需要将字体大小放大到200%;     患有运动性残疾,因此无法用手操作鼠标,而用点击棒来操作键盘,或通过视线点击器来操作网站的用户;     使用移动设备如常用的手机,或使用跟踪球等不常见的计算机控制设备的用户。 实现可用性、可访问性的方法     逐步强化你的网站功能,同时对支持性进行测试。运用“渐进增强”和“平稳退化”原则开发网站。     允许用户关闭有问题的增强功能。     提供相同内容或功能的替代版本。     就客户端需要支持的技术向你的客户提出建议,并举例说明哪些公司的产品支持这些技术。 可访问性良好网页的特征     HTML语义化、结构化:HTML语义结构提供了网页的整体框架,提示他们在文件层级中所处的位置,还有他们可以如何与各种页面元素进行交互,以及在适当的地方对文本内容进行强调,帮助用户获得大量重要信息。如导航菜单例子:     <ul>         <li>Menu Item 1</li>         <li>Menu Item 2</li>         <li>Menu Item 3</li>     </ul>     说明:通过将导航菜单构造为列表,就能很容易地让那些使用屏幕阅读器、同时无法看到列表的人知道这是个列表。因为他们的屏幕阅读器会告诉他们这是一张列表。如果你没有使用列表标记,屏幕阅读器就没办法知道这是列表,因此也就不能告诉使用者了。     替代内容:文本可以作为页面内容的通用替代内容,如img标签的alt属性值、a标签的title属性值。     <a href="http://www.alimama.com" title="淘宝联盟大促销">         <img alt="淘宝联盟大促销" src=http://www.webjx.com/web/"images/app/sale.jpg"/>     </a>     说明:文本内容可以很方便地由屏幕阅读器朗读出来,也可以放大或缩小,还可以方便地改变其对比度,或者进行其他许多变形操作。alt 属性包含了对该图片的简短描述,以便无法准确看到该图片的用户(或搜索引擎)使用,title属性负责对链接地址的详细文本描述。     HTML定义基本交互:实现tab选项卡搜索功能     <form action="search.html" method="GET">         <fieldset>             <legend>Search within:</legend>              <ul>                 <li><label for="dogs">Dogs</label><input id="dogs" type="radio" name="animal" value="dog" checked></li>                 <li><label for="cats">Cats</label><input id="cats" type="radio" name="animal" value="cat"></li>                 <li><label for="fish">Fish</label><input id="fish" type="radio" name="animal" value="fish"></li>             </ul>         </fieldset>         <input type="text" id="searchfield" name="search"/>         <input type="submit" value="Search"/>     </form>     说明:先考虑基本交互(而不是仅仅只加载视觉效果的部分)的话,你就可以简化实现tab搜索效果。现在我们可以只用一个表单来进行所有的搜索,而同时仍然能实现tab选项卡效果(虽然这需要一点样式和脚本)。通过 AJAX 来插入页面内容,那禁用javascript的用户将无法使用。 四个可访问性标准(WCAG 2.0):        可感知:人们可以通过适合自己的媒体来获知网页内容。比如应当让盲人得以收听页面内容。例如,图像应该有文本对应体。        可操作:人们可以与 web 应用程序或内容进行交互。例如,用户应该可以不用鼠标也能与某个网站进行交互,并且可以通过屏幕阅读器来进行导航。       可理解:使用者可以弄懂页面内容和用户界面。例如,正文不应该比它需要的更加复杂,且网站应以可预测的方式来运行。       健壮性:所提供的一切服务都应当不受平台或操作系统的限制。这样就可以避免人们提供一些不太完善的服务,这些服务会因为硬件/软件的限制而导致大多数人都无法使用。例如,不同设备上的浏览器能够一起使用网站,且导航应该是一致的。         说明:网站并不是必须满足全部这些要求,要视网站用户类型而定,但为了实现可访问性,网站应当确保其页面可以用一般的屏幕阅读技术读取。        总结:可访问性是网站开发质量的一个衡量标准。如果你在开发网站的时候(以及开始开发前)顾及你的使用用户的话,你就能创建可用性、可访问性更好、更符合web标准的网页,并且享受它所带来的一切好处。 转载:https://blog.csdn.net/foreverlove_lyf/article/details/51136804 

  • tiedong
  • 前端
  • 2018-08-07 11:03:43
  • 478

php微信H5支付

php微信H5支付

1、首先到微信商户平台开通H5,如下图   此产品在公司是已经开通,如果你未开通,可以按照所需要的资料填写,然后到开发配置添加域名,域名必须是备案通过的   接下来直接给大家上代码了 $money= 1;//充值金额function http_post($url, $data) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER,0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $res = curl_exec($ch); curl_close($ch); return $res; } $userip = $_SERVER["REMOTE_ADDR"]; //获得用户设备IP 自己网上百度去 $appid = "ggg";//微信给的 $mch_id = "fff";//微信官方的x $key = "kkkk";//自己设置的微信商家key $rand = rand(00000,99999); $out_trade_no = '20170804'.$rand;//平台内部订单号 $nonce_str=MD5($out_trade_no);//随机字符串 $body = "微信H5支付";//内容 $total_fee = $money; //金额 $spbill_create_ip = $userip; //IP $notify_url = "http://www.erdangjiade.com/"; //回调地址 $trade_type = 'MWEB';//交易类型 具体看API 里面有详细介绍 $scene_info ='{"h5_info":{"type":"Wap","wap_url":"http://www.erdangjiade.com","wap_name":"微信H5支付"}}';//场景信息 必要参数 $signA ="appid=$appid&body=$body&mch_id=$mch_id&nonce_str=$nonce_str¬ify_url=$notify_url&out_trade_no=$out_trade_no&scene_info=$scene_info&spbill_create_ip=$spbill_create_ip&total_fee=$total_fee&trade_type=$trade_type"; $strSignTmp = $signA."&key=$key"; //拼接字符串 注意顺序微信有个测试网址 顺序按照他的来 直接点下面的校正测试 包括下面XML 是否正确 $sign = strtoupper(MD5($strSignTmp)); // MD5 后转换成大写 $post_data = "<xml> <appid>$appid</appid> <body>$body</body> <mch_id>$mch_id</mch_id> <nonce_str>$nonce_str</nonce_str> <notify_url>$notify_url</notify_url> <out_trade_no>$out_trade_no</out_trade_no> <scene_info>$scene_info</scene_info> <spbill_create_ip>$spbill_create_ip</spbill_create_ip> <total_fee>$total_fee</total_fee> <trade_type>$trade_type</trade_type> <sign>$sign</sign> </xml>";//拼接成XML 格式 $url = "https://api.mch.weixin.qq.com/pay/unifiedorder";//微信传参地址 $dataxml = http_post($url,$post_data); //后台POST微信传参地址 同时取得微信返回的参数 POST 方法我写下面了 $objectxml = (array)simplexml_load_string($dataxml, 'SimpleXMLElement', LIBXML_NOCDATA); //将微信返回的XML 转换成数组 echo "<pre>"; echo <a class="btn-green" id="getBrandWCPayRequests" href="<?php echo $objectxml['mweb_url'];?>">测试H5支付</a>; echo '<hr>';你希望用户支付完成后跳转至https://www.wechatpay.com.cn,则可以做如下处理:  MWEB_URL= https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096&redirect_url=https%3A%2F%2Fwww.wechatpay.com.cn说明:  1.需对redirect_url进行urlencode处理   2.由于设置redirect_url后,回跳指定页面的操作可能发生在:1,微信支付中间页调起微信收银台后超过5秒 2,用户点击“取消支付“或支付完成后点“完成”按钮。因此无法保证页面回跳时,支付流程已结束,所以商户设置的redirect_url地址不能自动执行查单操作,应让用户去点击按钮触发查单操作。其他常见错误,请参考:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_4

  • tiedong
  • php
  • 2018-08-07 09:43:42
  • 628

open_id 和 union_id 的区别

open_id 和 union_id 的区别

通过获取用户基本信息接口,开发者可通过OpenID来获取用户基本信息,而如果开发者拥有多个公众号,可使用以下办法通过UnionID机制来在多公众号之间进行用户帐号互通。1. 将多个公众号绑定到同一个微信开放平台(open.weixin.qq.com)帐号下,即同一个Union下2. 通过获取用户基本信息接口中的UnionID来区分用户的唯一性,不过需要注意的是:公众号只有在被绑定到微信开放平台帐号下后,才会获取UnionID。只要是同一个微信开放平台帐号下的公众号,用户的UnionID是唯一的。换句话说, 同一用户,对同一个微信开放平台帐号下的不同应用,UnionID是相同的。对于拥有多个账号的企业来说,unionid可以帮助识别不同公众账号下的用户是否是同一个人。这样在不同账号下对该用户提供的服务可以连续起来了。

  • tiedong
  • 前端
  • 2018-08-06 09:56:24
  • 1213

小程序请求不了豆瓣接口api

小程序请求不了豆瓣接口api

                 通过豆瓣api可以获取很多电影、书籍等的数据信息。昨晚上用微信小程序请求豆瓣api,竟然被豆瓣拒绝了。(豆瓣设置了小程序的访问权限)。出现403报错;如下图:由于原因是豆瓣那边设置了对小程序的访问权限,后来我也查了资料,很多人都遇到这种问题;如果你没有配置nginx或者apache环境的话,配置一个,我这边是配置nginx环境,在nginx.conf加入以下配置:代码:location /v2/ { proxy_store off; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Referer 'no-referrer-when-downgrade'; proxy_set_header User-Agent 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'; proxy_connect_timeout 600; proxy_read_timeout 600; proxy_send_timeout 600; proxy_pass https://api.douban.com/v2/; }重启nginx:修改小程序那边的请求路径为http://localhost/v2/movie/top250,结果如下图:

  • tiedong
  • 前端
  • 2018-07-14 10:17:58
  • 915

php get_called_class()函数与get_class函数的区别

php get_called_class()函数与get_class函数的区别

get_class (): 获取当前调用方法的类名; get_called_class():获取静态绑定后的类名;class Foo{      public function test(){         var_dump(get_class());       }      public function test2(){        var_dump(get_called_class());       }      public static function test3(){        var_dump(get_class());       }      public static function test4(){        var_dump(get_called_class());       }    }   class B extends Foo{    }   $B=new B();   $B->test();   $B->test2();    Foo::test3();    Foo::test4();    B::test3();    B::test4();输出结果:string 'Foo' (length=3)string 'B' (length=1)string 'Foo' (length=3)string 'Foo' (length=3)string 'Foo' (length=3)string 'B' (length=1)

  • tiedong
  • php
  • 2018-07-03 16:23:00
  • 633

php容联云通讯,发送短信

php容联云通讯,发送短信

           现在很多网站都有发短信验证这个功能,近期我们公司这边也要做一个短信认证功能,公司这边主要注册了容联云通讯第三方发送短信的平台;           1、首先先去注册一个账户,注册完成后到开发手册下载一个模板:   我这边主要用着几个比较核心的文件:然后到控制台-号码管理添加测试号码:再到控制台查看开发者账号:打开SendTemplateSMS.php文件,填写相应的配置:调用:填写相应的内容,请求SendTemplateSMS.php文件,短信就发送成功

  • tiedong
  • php
  • 2018-07-03 13:39:33
  • 562

php常用算法题

php常用算法题

1. 使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组//冒泡排序(数组排序)function bubble_sort($array){    $count = count($array);    if ($count <= 0) return false;    for($i=0; $i<$count; $i++){        for($j=$i; $j<$count-1; $j++){            if ($array[$i] > $array[$j]){                $tmp = $array[$i];                $array[$i] = $array[$j];                $array[$j] = $tmp;            }        }    }    return $array;}//快速排序(数组排序)function quick_sort($array) {     if (count($array) <= 1) return $array;     $key = $array[0];     $left_arr = array();     $right_arr = array();     for ($i=1; $i<count($array); $i++){         if ($array[$i] <= $key)             $left_arr[] = $array[$i];         else            $right_arr[] = $array[$i];     }     $left_arr = quick_sort($left_arr);     $right_arr = quick_sort($right_arr);     return array_merge($left_arr, array($key), $right_arr); }2. 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组//二分查找(数组里查找某个元素)function bin_sch($array, $low, $high, $k){     if ($low <= $high){     $mid = intval(($low+$high)/2);     if ($array[$mid] == $k){     return $mid;     }elseif ($k < $array[$mid]){     return bin_sch($array, $low, $mid-1, $k);     }else{     return bin_sch($array, $mid+1, $high, $k);     }     }     return -1; }//顺序查找(数组里查找某个元素)function seq_sch($array, $n, $k){     $array[$n] = $k;     for($i=0; $i<$n; $i++){         if($array[$i]==$k){             break;         }     }     if ($i<$n){         return $i;     }else{         return -1;     } }3. 写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序function array_sort($arr, $keys, $order=0) {     if (!is_array($arr)) {         return false;     }     $keysvalue = array();     foreach($arr as $key => $val) {         $keysvalue[$key] = $val[$keys];     }     if($order == 0){         asort($keysvalue);     }else {         arsort($keysvalue);     }     reset($keysvalue);     foreach($keysvalue as $key => $vals) {         $keysort[$key] = $key;     }     $new_array = array();     foreach($keysort as $key => $val) {         $new_array[$key] = $arr[$val];     }     return $new_array; }本文转载自:http://www.phpzixue.cn/detail586.shtml                                                                             

  • tiedong
  • php
  • 2018-06-29 09:59:13
  • 500

五种以上方式获取一个文件的扩展名

五种以上方式获取一个文件的扩展名

要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数,比如 get_ext1($file_name), get_ext2($file_name),答案:function get_ext1($file_name){     return strrchr($file_name, '.');}//strrchr():函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符;function get_ext2($file_name){     return substr($file_name, strrpos($file_name, '.'));}//substr() 函数返回字符串的一部分:substr(string,start,length)//strrpos() 函数查找字符串在另一字符串中最后一次出现的位置(区分大小写)。function get_ext3($file_name){     return array_pop(explode('.', $file_name));}//array_pop() 函数删除数组中的最后一个元素。function get_ext4($file_name){     return pathinfo($file_name, PATHINFO_EXTENSION);}/pathinfo() 函数以数组的形式返回关于文件路径的信息。[dirname][basename][extension]function get_ext5($file_name){     return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), '.')));}//strrev() 函数反转字符串。

  • tiedong
  • php
  • 2018-06-29 09:45:00
  • 512

TP5 paginate()分页后给结果集追加字段和数据

TP5 paginate()分页后给结果集追加字段和数据

在TP5中,我们常常会需要做数据分页查询,但是只查询得到的数据并不能完全满足我们的需求,我们偶尔会想数据集中追加我们需要的指定的字段和数据。如果你们用foreach的话就会报错,tp5手册有功能是分页后处理数据。用each遍历处理;如下:$list = Db::name('user')->where('status',1)->paginate()->each(function($item, $key){     $item['nickname'] = 'think';return $item; });

  • tiedong
  • php
  • 2018-06-28 18:25:01
  • 699

liunx操作数据库和远程其他数据库一些基本操作

liunx操作数据库和远程其他数据库一些基本操作

之前我在搞网站的时候,因为一些数据库的表存在不同的服务器,所以就要把表结合起来,如果文件大的话,倒入导出就要等很久,这是我学到的一些基本操作:mysqldump -uroot -p  cmodel > cmodel.sql      导出数据库为sql文件 (-p要填写密码)mysqldump -uroot -p test  university_list  > university_list.sql   导出某个数据库的某个表为sql文件du -sh cmodel.sql                                                读取sql文件有多大,所占内存sz   university_list.sql                                              传送该sql文件到本地rz                                                                           上传本地文件到服务器mysql -uroot -h127.0.0.1  -pmyroot                     远程别的服务器数据库(-h ip地址  -p密码)然后你可以选择数据库,再执行:source   /root/think_category .sql   source是执行文件命令  ,sql 文件是你上传在哪个文件下的文件,说明你已经从数据库导到其他数据库了

  • tiedong
  • 后端
  • 2018-06-22 12:04:55
  • 593

全文搜索迅搜在liunx 下的安装

全文搜索迅搜在liunx 下的安装

一、安装    #获取    wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2    #解压    tar -xjf xunsearch-full-latest.tar.bz2    #安装    cd xunsearch-full-1.4.9/    sh setup.sh        接下来提示确认安装目录,默认/usr/local/xunsearch,直接回车确认,y,一个泡面的时间安装完成。  安装完成后,启动/重启xunsearch后台服务,并建议将下面命令添加到 /etc/rc.local 开机脚本中。    /usr/local/xunsearch/bin/xs-ctl.sh start二、检查环境    #如果php没有配置到linux环境变量    /path-to-php/bin/php /usr/local/xunsearch/sdk/php/util/RequiredCheck.php三、配置建立索引    cd /usr/local/xunsearch/sdk/php/app    mkdir  goods.ini        往goods.ini写入以下内容    project.name = goods    project.default_charset = utf-8    server.index = 106.75.129.183:8383    server.search = 106.75.129.183:8384    #tokenizer = default        [goods_id]    type = id    tokenizer = full        [goods_name]    type = title        [description]    type = body    建立索引    /usr/local/xunsearch/sdk/php/util/Indexer.php --rebuild --source=mysql://root:myroot123@127.0.0.1/wendao --sql="select goods_id,goods_name,description from ecm_goods" --project=goods        测试搜索    /usr/local/xunsearch/sdk/php/util/Quest.php wendao 服装四、开发    1,newsget.php 在浏览器上输入 XXX/newsget.php?key=关键字 搜索查看        复制代码     <?php     /*     newsget.php     usage:newsget.php?key=keyword     */          $key=trim($_GET['key']);     require 'php/lib/XS.php';     try     {         $xs = new XS('news'); //实例化XS对象         $search=$xs->search;  //获取XSSearch搜索对象,了解跟多,点此到官网查看         $docs=$search->search($key); //通过XSsearch获取XSDocment文档对象         foreach ($docs as $doc) //循环获取文档内容,获取更多XSDocument文档内容,点此到官网查看         {            echo '第'.$doc->rank().'条结果 , 匹配度[' . $doc->percent() . "%]\n<br/>";            echo 'id:'.$doc->docid().',标题:'.$doc->title.', 搜索内容:'.$doc->content . "\n<br/>"; //使用类似php __get的方式获取文档的字段内容            echo '<br/>';             }     catch (XSException $e)     {         echo $e;               // 直接输出异常描述         if (defined('DEBUG'))  // 如果是 DEBUG 模式,则输出堆栈情况             echo "\n" . $e->getTraceAsString() . "\n";     }        2,newsadd.php 在浏览器上输入XXX/newsadd.php?title=标题&&content=内容 添加内容到数据库和更新到索引中        复制代码    <?php    /*    newsadd.php    usage:newsadd.php?title=title&&content=content    */        $title=trim($_GET['title']);    $content=trim($_GET['content']);    //pdo方式连接数据库,添加数据    $mysql=new PDO("mysql:localhost;dbname=test_xs",'root','123');    $mysql->query('set names utf8');    $mysql->query('use test_xs');    $addtime=time();    $id=0;    $sql="insert into news (title,content,addtime) values('$title','$content',$addtime)";    if(!$mysql->query($sql))    {            die('mysql add err');    }    else    {            $id=$mysql->lastInsertId();    }    //添加数据到数据库后,导入新索引    require 'php/lib/XS.php';    try    {            $xs = new XS('news');            $doc = new XSDocument; //关于XSDocument文档对象及操作方式,点此到官网查看            $doc['id']=$id;  //数组方式赋值            $doc->title=$title;//对象方式赋值            $doc->setFields(array('content'=>$content,'addtime'=>$addtime));//数据方式批量赋值           if($xs->index->add($doc))//将文档添加到索引中,这里的索引更新是异步的,因此不会立即生效,xunsearch搜索系统会在合适的时间内更新,关于index对象,点此到官网查看           {                   echo '添加成功';           }           else           {                   echo '数据添加成功但索引失败';           }   }   catch (XSException $e)   {       echo $e;               // 直接输出异常描述       if (defined('DEBUG'))  // 如果是 DEBUG 模式,则输出堆栈情况           echo "\n" . $e->getTraceAsString() . "\n";   }    参考网址:https://www.cnblogs.com/GaZeon/p/5410774.html     /usr/local/xunsearch/bin/xs-ctl.sh -s both restart

  • tiedong
  • 后端
  • 2018-06-06 09:39:30
  • 539

linux服务器git pull/push时提示输入账号密码之免除设置

linux服务器git pull/push时提示输入账号密码之免除设置

1、先cd到根目录,执行git config --global credential.helper store命令2、之后cd到项目目录,执行git pull命令,会提示输入账号密码。输完这一次以后就不再需要,并且会在根目录生成一个.git-credentials文件[root@dwdwdwdwq blog]# git pullUsername for 'https://git.oschina.net': xxxx@xxxx.com Password for 'https://xxxx@xxxx.com@git.oschina.net':

  • tiedong
  • 后端
  • 2018-06-05 14:38:49
  • 557

PHP断点调试工具Xdebug的安装

PHP断点调试工具Xdebug的安装

 Xdebug是一个PHP程序调试器,可以用来跟踪,调试和分析PHP程序的运行状况。其实调试PHP还有其他工具比如ZendDebugger,但zend官方不是免费发布的,后来更新为zend Server也是收费版。而Xdebug是完全免费的并且功能也不差。其实xdebug可以看做PHP的扩展,如果环境中没有集成需要先在官网下载然后安装,下载地址:https://xdebug.org/download.php。我选择的是非线程(下面有介绍): 1.在windows下的安装方式,在windows安装时下载需要注意除了下载的扩展和PHP版本一致外还应该查看一下PHP是TS(Thread-Safety)即线程安全还是NTS(None-Thread Safe)即非线程安全,可以通过查看phpinfo内容确定是哪一种。找到phpinfo中的PHP ExtensionBuild这一项,如下图: 下载完成后将dll文件放到php的安装目录下,为了统一可以放到ext目录下,也可以重命名一下,然后再php.ini中加入如下代码(具体可根据调试场景进行修改);如下图: 在php.ini加入调试配置,修改zend_extension 配置:[Xdebug]zend_extension ="扩展的绝对路径"xdebug.collect_params = 1xdebug.collect_return = 1xdebug.auto_trace = 0xdebug.profiler_enable = 0xdebug.max_nesting_level = 1000000xdebug.remote_enable = 1xdebug.remote_host = localhostxdebug.remote_port = 9999xdebug.remote_handler = dbgpxdebug.idekey = netbeans-xdebug然后重启你的环境(php+nginx,php+apache),之后使配置文件生效可以再phpinfo中查看到如下图所示: 这样说明你已经安装成功了。

  • tiedong
  • php
  • 2018-06-03 10:21:51
  • 589

PHP实现时间轴函数

PHP实现时间轴函数

本文将介绍如何实现基于时间轴的时间的转换。首先我们要明白时间的几个函数:time():返回当前的 Unix 时间戳date():格式化一个本地时间/日期。应用举例:date("Y-m-d H:i:s",time()); 格式化当前时间,输出:2010-10-11 05:27:35strtotime():将任何英文文本的日期时间描述解析为 Unix 时间戳。应用举例:echo strtotime("+1 day"), "n"; 输出1天前的时间戳:1286861475date_default_timezone_set():设定要用的默认时区。一般我们设置北京时间:date_default_timezone_set("PRC");理解上面几个函数后我们来写时间轴函数:该函数的原理就是将系统当前时间与目标时间比较,得到一个差值,再将差值与时间范围(转换成秒)比较,根据其处在时间轴的范围输出不同的结果(如:5分钟前)。为了便于计算,我们将时间都转换成Unix时间戳。01function tranTime($time) { 02    $rtime = date("Y-m-d H:i", $time); 03    $htime = date("H:i", $time); 04    $time = time() - $time; 05    if ($time < 60) { 06        $str = '刚刚'; 07    } elseif ($time < 60 * 60) { 08        $min = floor($time / 60); 09        $str = $min . '分钟前'; 10    } elseif ($time < 60 * 60 * 24) { 11        $h = floor($time / (60 * 60)); 12        $str = $h . '小时前 ' . $htime; 13    } elseif ($time < 60 * 60 * 24 * 3) { 14        $d = floor($time / (60 * 60 * 24)); 15        if ($d == 1) 16            $str = '昨天 ' . $rtime; 17        else 18            $str = '前天 ' . $rtime; 19    } 20    else { 21        $str = $rtime; 22    } 23    return $str; 24}    函数tranTime()中的参数$time必须为Unix时间戳,如果不是请先用strtotime()将其转换成Unix时间戳。上面的代码一看就明白了,不用再多述。调用函数,直接输出:$times="1286861696 "; echo tranTime($times); 

  • tiedong
  • 前端
  • 2016-12-22 17:22:17
  • 635
Top