taro多端实践之h5端

taro是什么

引用官方的一句话来说明:

Taro 是一套遵循 React 语法规范的 多端开发 解决方案。现如今市面上端的形态多种多样,Web、React-Native、微信小程序等各种端大行其道,当业务同时在不同的端都要求有所表现的时候,针对不同的端编写多套代码的成本显然非常高,这时只编写一套代码就能适配到多端的能力就显得极为重要。使用 Taro,我们只需书写一套代码,再通过 Taro 的编译工具,即可将源代码分别编译出在不同端(微信/百度/支付宝/字节跳动小程序、快应用、H5、React-Native 等)运行的代码。

由于各小程序在api设计层面大体上还是一致的,所以这些端的兼容问题会稍微少点。h5和RN还有快应用的兼容,相对来说应该是比较难处理的。

taro兼容h5的实践

从兼容h5端的实践,总的来说,大问题没有,小问题还是不少的。下面我就来一一说说这些小问题。

  1. map组件暂未支持编译到h5端(当前taro最新版本2.0.1)。map组件的缺失对于需要的业务来说,还是比较麻烦的,解决办法有2种。第一,可以自己通过js的开源地图封装,对于能力较强的,可以去官方提个PR;第二,看看能不能从产品上进行阉割;
  2. iconfont使用alicdn,在本地dev无法显示。这个部署到服务器就没有问题了。后来查看taro的github上的issue发现,跟dev的机制有关系,具体还说不太清楚。需要在iconfont生成的代码font-face的url,指向alicdn的域名前添加完整的http或https协议(默认的域名前是双斜线(//)开头)。
  3. swiper组件在h5端,autoplay到最后一个slide,会停止下来(使用taro版本1.3.25)。查看官方changelog,该问题已经在taro版本2.0.0解决。
  4. 写样式需要注意2个问题。一个是单位,前期写css,用了rpx单位的情况。解决办法就是写回px。对于行内写了rpx的,使用Taro.pxTransform方法兼容,行内样式写了rpx,不会生效。另外一个需要注意的是高度使用vh。在部分浏览器,100vh是整个屏幕的高度,而视窗高度是100vh减去地址栏的高度,因此最好使用window.innerHeight来替代100vh的使用。
  5. onPageScroll函数的定义如果使用函数表达式定义,在h5端不会执行。解决办法是,使用具名函数定义而非函数表达式。

  6. 页面栈没有route属性。

const pages = Taro.getCurrentPages()
pages[0].route // route属性取到的值是undefined

解决办法:查询issue发现已有解决办法,在h5端,route获取方法pages[0][‘vnode’][‘_owner’][‘vnode’][‘props’][‘path’](注:pages[0]泛指页面栈实例)。

  1. picker-view组件不支持h5端编译。可以使用picker或者第三方组件来代替。其中如果要使用picker组件来代替,样式需要通过css覆写来实现。然后picker组件的触发,业务中如果不是picker组件点击显示,兼容的办法是获取到picker组件下的子节点,将这个子节点的虚拟dom获取到,调用click,就可以触发了。对于picker的字节点,最好做css隐藏处理。

  2. h5端,navigateBack的delta不能设置超过已有的页面栈数量,设置数值过大,跳转会失败,且不会有任何提示信息。

  3. setState传入一个方法的时候,返回的对象不能是传入的prevState对象本身,即有的开发者会在prevState对象上修改属性,然后return,在h5端不会生效。

  4. $router的参数跟各小程序端的不一样,可以大致这样兼容,即小程序端的this.$router.params等价于h5端的this.$router。

  5. taro的绑定事件阻止冒泡,需要在第一个事件处理函数里处理,如果通过第一个事件处理函数传递event,在下一个函数中处理会不起作用。(实验结果taro版本v1.3.25,支付宝端)。

  6. image图片,在h5不支持mode属性,需要自己用background-size兼容实现。

  7. webview组件的使用,webview内的h5跟壳之间的通信兼容。webview组件编译到h5端,是使用iframe来实现webview的效果的,通信可以使用js原生的方法postMessage来做,在壳这一侧,没有支持组件属性onMessage来监听内嵌h5的数据传递,需要通过addEventListener对message事件进行监听,同时需要注意的是,message事件会默认触发,因此,在传递信息的时候需要通过一些自定义的字段,来过滤掉不相干的message事件的处理。

小结

taro处理的端很多,虽然具备了一定的成熟度,能够满足一些业务需求,但离完全成熟还有点距离,所以难免在使用过程中会遇到坑,踩坑之旅,需要多点耐心,多调试想办法,祝入坑的朋友,不掉发,斜眼笑:)。

小程序技术概述及支付宝小程序开发实践小结

前言

小程序底层是基于webview来实现的,虽然不是什么革命性的全新技术,但是却是影响广泛的技术新应用。它的出现不是凭空出现的,肯定为了解决一些问题。那么没有小程序前的客户端有哪些比较明显的痛点呢?

  1. 纯客户端原生渲染的缺点:在动态打包,动态下发,存在一些问题,比如缺乏灵活性。
  2. 纯web技术渲染的缺点:在一些有复杂交互的页面上可能会面临一些性能问题,这是因为在 Web 技术中,UI渲染跟 JavaScript 的脚本执行都在一个单线程中执行,这就容易导致一些逻辑任务抢占UI渲染的资源。另外一个问题,是web太灵活,用完即走,用户留存度低。

针对这两个缺点,客户端技术、web技术都有一些新的技术方案出现。而在web技术这个方向,大的方向是对web容器进行增强,赋予web更多性能和能力。目前主流有三类技术比较火:

  • 小程序技术
  • PWA技术
  • phoneGap为代表的套壳并对webview增强的技术

这里主要说说小程序技术,其他两类技术在国外较火,但在国内不温不火,由于主题不是它们,这里不多做介绍了。小程序实现的基本思路是通过分离渲染和逻辑的处理,即将小程序的运行环境分为渲染层和逻辑层,每个页面有单独的webview来渲染,而逻辑是在一个独立的线程运行,避免了web的UI渲染跟javaScript在同一单线程中执行会出现的性能瓶颈的问题,因此他们互不干扰,两个线程只会有一些数据通信。同时,提供大量客户端原生能力的接口,从而充分结合客户端原生技术和web技术的能力,给客户端动态化提供了一个新的技术方案。

小程序通信模型

一门新技术的诞生,在初期,对开发者而言,都会有那么一段黑暗时期,各家小程序都不例外。进入正题,那些年踩过的支付宝小程序的坑。

支付宝小程序开发的一些痛点

小程序自身不稳定

据不完全统计,我们在开发我司在各家超级APP中的小程序的时候,给官方提过的bug,总和不下于百余枚。其中支付宝小程序占比20%左右,分布主要在以下几个方面:

  1. input、text-area等表单组件
  2. 覆盖原生组件的cover-view组件
  3. 支付宝授权
  4. 开发工具

当然,我们遇到这几个方面问题都一一向官方反馈过,也得到了官方的确认,在面临这些问题时,由于修复有个过程,我们通过修改产品交互设计和程序hack等方法,也还算顺利地绕开了一些问题。由于大部分问题官方已经修复,所以具体将bug罗列出来没什么意义。重要的是在面对问题的时候,有化繁为简、追根究底的能力。

调试及测试

调试的问题也是比较棘手的,影响业务开发效率,主要的痛点在以下几个方面:

  1. 代理抓包只支持ios,不支持android代理抓包,官方解释:其底层网络库有做限制导致的
  2. 开发工具与真机在某些特性上表现不一致
  3. 体验版不像其他家小程序那样可以使用调试器

目前这些问题还部分存在,虽然不是致命的,但是作为开发者,还是很希望这方面的能力能更快完善和优化。如果你看到本文已经没有这些问题了,那么恭喜你,如果还存在,也恭喜你,顺利入坑。

发版本

每次发体验版,需要重新设置新发版本为体验版,相比于微信小程序的开发体验(同一个人上传体验版,自动更新,无须重新设置体验版)来说,真的不是一般的苦逼,虽然可以通过尽量降低发布频次,集合更多问题统一发版这个解决方案,但是特别是在一些特定的场景下,需要频繁在体验版测试的时候,每次都需要设置体验版,是极其琐碎的事情。希望以后支付宝小程序能改善这一开发体验。

社区反馈

社区论坛第一版的时候,我觉得反馈问题非常方便,是非常好的。但是在今年(2019)5月份开始将社区改版了,满怀期待的新版本社区,在8月份左右上线了,但是却非常不好用,反馈问题、查找问题现在反而变得不容易了,以前提过的问题,也找不到了。这个实在让人费解。期间还在各种渠道,比如在线客服、钉钉官方技术群等反馈过问题,但是这些渠道反馈的问题毕竟没有可追溯性,不是一种理想的反馈bug的渠道。还是希望继续推进社区论坛的建设,以前反馈的问题,也能搜索到,而不是将其抹去。所以总结下,目前相对比较有效率的反馈方式是支付宝小官方技术钉钉群,群号:23362130,反馈问题前,可以先在社区搜索下问题。如果出现了更便捷的反馈形式,欢迎补充。

资源位跳转,与运营及市场人员的沟通之痛

支付宝小程序提供多种跳转能力,主要分为四类:

  • 小程序跳转小程序
  • url schema 跳转小程序(h5跳转小程序)
  • 小程序跳转支付宝官方页面或小程序
  • 小程序跳转小程序插件

运营与市场人员为了给小程序导流,时常会给出触达我们小程序的方法,以及收到别人可触达他们家小程序的方法。而由于支付宝的跳转能力是多种多样的,同时我们自己还有一套配置规则,运营和市场人员常常面对的问题就是,收到各种不一样的跳转方法,但是他们不明白这些方法之间的转换规则,自然当需要把资源位上到我们家小程序时,不知道应该怎么转换。同时,当别人要我们家小程序触达方法时,无法按照对方的规则给出方法。

当我们运营市场人员遇到这个问题,目前都是通过直接跟开发沟通,开发帮忙手动转换来实现这个需求。后续,我们还是会尝试一些解决方法,比如开发一些转换工具,给他们使用。

结语

总的说来,小程序的能力是显而易见的,身在中国应该大家都有深刻的印象。但是小程序目前在各家超级APP的具体应用都有不小的差异,虽然底层技术类似,但是由于各个生态存在的差异性,还是对开发者造成了不小的困扰。目前,业界虽有Uni-app, Taro等这种多端开发框架,来抹平多端的底层差异,但是实践来看,仍然不是那么一帆风顺,坑也不少,同时各家的运营策略是不同的,提供的扩展服务不一而同。同时,引入第三方框架来开发,在获取收益的同时,又引入了一个可能出问题的一环,如此,要同时排查第三方框架、支付宝小程序本身和自身业务写法的问题,增大了开发及调试的难度系数。幸运的是,随着时间的推移,小程序底层会逐渐稳定,同时,目前w3c也在积极朝着制定小程序规范的方向努力,小程序的发展会绽放更多光彩。

margin在flex布局中的妙用

直奔主题,我们来看一个情况:

<div>
    <div></div>
    <div></div>
</div>

上面就是描述问题的最简单的结果,一个div中有两个子div,要求是第一个div居左,第二个div居右,位置不能变化,第一个div有可能隐藏。

那么问题来了,如何使用flex来实现这种布局呢?

分析尝试

大家很容易想到,父容器flex, justify-content:space-between不就好了吗? 如果第一个元素不隐藏,那毋庸置疑,但是如果第一个元素隐藏,那么第二个元素会自动跑到左边,这样行不通的哟。我也是想了好一段时间,都没想到最好的方案。

margin在flex布局中的力量

最终在知乎上找到了同类型的问题,如何解决前端的flex流动布局中的单个子元素位置?。margin在flex布局中,子元素margin为auto的时候,伸缩包含块剩余的空间将会分配到flex-item的外边距margin上,那这个问题的答案就可以对第二个flex-item添加margin-left: auto来完美解决。同时,这个也很完美的解决了当flex容器下有三个子元素时,要求两个元素居左一个元素居右的这种情况。就不用对两个元素这边再加一个flex容器包裹了。简直不要太完美。

结语

在网上看到的绝大多数flex教程都没有提到过关于margin在flex布局中的应用,这也是此文的意义,希望能帮助到大家,同时希望大家更深入或者找到第一手资料学习。不过大家也许和我一样懒,那我们就多百度咯,毕竟第一手资料读起来不是一般的难受。苦笑。

web前端交互反馈思考

目前的人类发展阶段,人机交互主要集中在电脑,而与电脑的交互主要有两种,一种命令行,另一种就是UI(user interface)可视化界面。可视化界面具有交互自然的属性,所以更为受大众欢迎,但是不得不说,它受欢迎程度以后会逐渐被语音交互甚至更高级别的人工智能交互所替代,因为以后的交互的发展趋势是趋近于更为自然。貌似扯远了,回到当下,在可视化界面里,点击的交互占了绝大部分,不管是pc的鼠标还是移动端的手机点击。不难想象,这种点击交互的反馈,对我们对这款设备或应用的评价有直接作用。好吧,我发现貌似起高了,我主要想思考的领域没这么广,其实通俗来说就是你点击了,让你知道你的点击的确发生了的反馈, 而且我思考的领域是web前端技术。

在css里,对于点击有active伪类可以响应点击,响应点击后,据我总结,我们主要有5种方式来反馈。

  1. 使用背景色变化来响应。目前应用比较广泛,比如按钮、列表等模块;
  2. 字体颜色变化。
  3. 区域透明度变化。
  4. 设置filter滤镜,来改变区域明暗度,色值等。
  5. 动效,不多说。

有冲动总结这个是因为自己长期使用macOS和IOS系统,发现在这些系统下的应用,在点击打开时的反馈是使图标变暗,而我在web中,没有实现过这种效果,于是很好奇。在以往,我们的web交互反馈类似的效果,是改变某一区域的背景色来使用户感知。但这样有一个缺陷,就是你不得不对每种颜色去设置点击响应色彩,比如红色,点击反馈你需要设置深红色。很幸运,思考进入状态了,一不小心就抓住了本质,就是一个滤镜功能,才想起css拥有强大的filter样式。但是很不巧,经过www.caniuse.com查询,filter兼容性,IE完全不支持,不管是IE的PC版还是Mobile版。如果你是在移动端,且不考虑IE mobile,那么使用这个属性没有太大问题的,PC如果兼容需要纳入IE, 那么很不幸,这么fancy的样式,你是用不了。

低级重复劳动会是一个商机

点到点的最后一公里引发的思考

共享单车出现是在2016年,它的出现极大改变了中国城市人的生活习惯,很好的解决了当前极度发达的公交体系在最后一公里接驳的效率问题。之所以提到共享单车,是因为我在大学一年级的时候,头脑风暴想怎么为我们人类带来一点社会价值时,其中一个最令我印象深刻的思考点就是解决我们日常生活中最后一公里的时效问题。如果你是没有自己车子在身边的人,又经常出门,我相信你一定能感受到,最后几公里,靠步行的时效很让人不爽。为什么呢?因为当今世界,虽然相比于无可限量的未来来说可能交通并不算发达,但相比于过去,今天坐个飞机是很平常的交通方式,飞行上千公里也就2个多小时,但是如果你没有私家车,在最后几公里只能靠步行,却要花费半个多小时,是很让人很不爽的,明明看地图,目标地点就在附近,却要走很久,那感受,简直了。受限于自己的认知水平,最后我也没能想到好的idea,但是却给我留下了很深刻的印象,以至于在共享单车出来时,联想到之前自己想到过这个问题,我非常激动和欣喜。

低级重复劳动背后的商机

整个人类社会的繁荣,离不开各行各业的努力,甚至每一个个体的生存本能。今天,我们拥有以往从未有过的高科技,它不断持续引领着我们的发展,极大的解放了我们的生产力。但是,在我们日常生活中,你仍然能看到不少低级的需要重复劳动的工作,虽然从价值上来说,的确我们的科技解决社会生产问题是有先后的,首要考虑的是价值大的方面,然后才是次要的。但是,其实这些重复的劳动并不需要太多科技的投入,而是在这个科技程度很不错的今天,是完全有过剩能力来解决这些低级的重复劳动的。关键在于提供低廉的实用工具,低廉没错,因为这些重复劳动的产出价值并不高,在解决这个问题的时候,要可持续就必须投入少,赔本的买卖,自然没有人会做。那么问题很明显了,怎么做呢?

怎么做

考察自身实力,穷屌丝一个,没有任何原始积累。所以我的步骤可能需要多一点。首先,市面上已经有很多不错的工具来解决不少重复劳动,而且物美价廉,但是由于这种物品,利润不高,并没有多少广告,只是口口相传,所以推广这些商品很有前景,所以,第一步,可以分析市面上这类工具,最有市场潜力的,可以拿来推广,还有一种办法,就是开类似一元店,但是货品的主题不在装饰或者其他,就是关于重复劳动的解放工具,如果效果好,连锁模式会很有用。第二步,有一定资本可以开始成立研发机构,推广机构,主题就是针对低廉重复劳动的工具的发明,来扩充自己的产品,使得自己可以造血,并推广到市场的任何一个角落。

结束语

我可能没有能力做成这件事,但是我相信,这一定会是一个方向,就像共享单车解决最后一公里的案例,是人类必须面对的问题。

快应用开发之初体验

1. 环境搭建及开发调试

  • 开发需要安装一个npm包hap-toolkit来生成初始化项目,类似vue-cli;
  • 移动端调试器安装,需要andorid手机,去官网资料中心下载apk;
  • 项目初始化后,使用npm run watch以及npm run server,通过快应用调试器扫码进入,就可以hot reload了,开发体验不会太差;
  • 项目初始化出的模板,从package.json依赖来看,webpack需要升级,太老旧,是1.x的版本;
  • 使用vConsole来作为调试控制台,无法安装到快应用中;调试使用快应用调试器提供的调试吧(需要在manifest开启日志,默认off),它是直接打开默认浏览器,然后接着玩儿;

2. 项目配置信息

  • 路由在这里配置;
  • 页面级别的信息如页面标题以及标题颜色、标题背景灯,也在这里配置;
  • 应用基本信息; 3.框架

大体上

  • 写法跟vue类似;
  • 生命周期跟微信小程序类似;
  • 页面级别的数据在private对象中,类似小程序的data对象;但是调用又跟vue类似,private的数据都挂载在this实例上,不像小程序的data数据是挂载在this实例的data对象上;
  • 路由参数传递,两种方式分别是a链接的query和router模块params参数传递,参数接受有两种方式,一种是protected对象,一种是public对象,他们的区别是protected是应用内部参数传递,public负责接收应用外部的参数传递;
  • 数据量大的时候,可以用$app实例上的$data来传递参数;
  • 数据请求可以使用快应用提供的@system.fetch模块
  • 现在app.ux中还不支持公用样式(官方:加了的话,担心性能会变差) 模板
  • 文字一定要放在text中,否则不显示(坑);
  • 不支持单位vw,vh;

逻辑

  • dom事件模型在快应用中不适用;

css样式( 由于快应用最终效果是native不是h5,用的是css的子集,坑较多)

  • css样式不需要写兼容,已经默认集成, 写兼容还可能会报错,默认border-box盒模型,不支持content-box和box-sizing;
  • 没有块元素、行内元素的模型;
  • css样式中的颜色值只严格支持16进制,不能使用缩写,不能使用语义颜色(还有这种操作,无语);
  • css样式中background只设置颜色的话,需要使用background-color,否则报错;
  • 不支持相对定位和绝对定位,支持固定定位;
  • 不支持float布局;
  • 不支持overflow属性;
  • 不支持伪元素选择器,如::before, ::after;
  • flex属性不支持缩写,如flex: 1 0 auto;是不支持的,只能单独写flex的属性;
  • 不支持样式中使用!important;
  • 不支持vertical-align属性;
  • 框架目前仅支持长度单位px和%, 当然不支持单位vw,vh;

4.组件

  • 自定义组件的引入方式是在模板使用import标签引入;

5.接口

  • 接口模块使用,需要在manifest.json中声明(特别是使用web组件时,需要声明,单无需引入模块);
  • 推送模块暂时还未支持(截止20180629);
  • 快应用限制唤起其他app的能力(https://bbs.quickapp.cn/forum.php?mod=viewthread&tid=282&highlight=webview);

6.发布部署

  • 需要在项目中的sign文件夹下添加release签名,然后npm run release,会生成有release签名的工程包,这个包就可以用于部署;
  • 部署是需要申请一个快应用的账号,通过后台上传相关项目资料;
  • 上传包的时候命名规则与app一致,版本管理要注意,快应用后台会检测versionCode,每次发布需要比上次发布的versionCode大;

后续会持续补充…

PHP免费获取手机号码归属地以及手机详细信息

最新发现的,很好用,简单快捷 apidata 首页:http://www.apidata.cn/

一、淘宝网API API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443 参数: tel:手机号码 返回:JSON

二、拍拍API API地址: http://virtual.paipai.com/extinfo/GetMobileProductInfo?mobile=15850781443&amount=10000&callname=getPhoneNumInfoExtCallback 参数: mobile:手机号码 callname:回调函数 amount:未知(必须) 返回:JSON

三、财付通API API地址: http://life.tenpay.com/cgi-bin/mobile/MobileQueryAttribution.cgi?chgmobile=15850781443 参数: chgmobile:手机号码 返回:xml

四、百付宝API API地址: https://www.baifubao.com/callback?cmd=1059&callback=phone&phone=15850781443 参数: phone:手机号码 callback:回调函数 cmd:未知(必须) 返回:JSON

五、115API API地址: http://cz.115.com/?ct=index&ac=get_mobile_local&callback=jsonp1333962541001&mobile=15850781443 参数: mobile:手机号码 callback:回调函数 返回:JSON

六、有道api接口 接口地址:http://www.youdao.com/smartresult-xml/search.s?type=mobile&q=13892101112 参数说明: type : 参数手机归属地固定为mobile q : 手机号码 返回XML格式:

<?xml version="1.0" encoding="gbk"?>
<smartresult>
<product type="mobile">
<phonenum>13892101112</phonenum>
<location>陕西 延安</location>
</product>
</smartresult>

或者

http://www.youdao.com/smartresult-xml/search.s?jsFlag=true&type=mobile&q=手机号码

返回JSON格式: fYodaoCallBack(1, {‘product’:’mobile’,’phonenum’:’13892101112′,’location’:’陕西 延安’} , ”);

PHP调用淘宝API实例:

<?php
$mobile = "150********";  //要查询的电话号码
$content = get_mobile_area($mobile);
print_r($content);

function get_mobile_area($mobile){
    $sms = array('province'=>'', 'supplier'=>'');    //初始化变量
    //根据淘宝的数据库调用返回值
    $url = "http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=".$mobile."&t=".time();

    $content = file_get_contents($url);
    $sms['province'] = substr($content, "56", "4");  //截取字符串
    $sms['supplier'] = substr($content, "81", "4");
    return $sms;
}

转载自: 作者: 李清波 链接: http://www.liqingbo.cn/blog-1339.html

php中session会话管理默认机制

最近工作之余有时间学习了一下php的session默认机制,下面是一些基本的关于session机制的关键要点罗列。

一.session是php的扩展,在php.ini配置文件中是默认开启的。

二.session基本工作机制

session,从字面意思来说是会话管理,即客户端跟服务器的会话管理。使用会话管理,需要使用session_start方法开启session,一旦调用这个方法,服务器会先自动获取配置中的session_id的名称,并根据客户端发送过来的cookie,检查客户端是否有session_id值发送过来,如果有,就会去服务器相应存储session文件的目录去查找对于session_id指定的文件,并将相关数据反序列化放入$_SESSION中,如果没有,就会针对这个客户端分配session_id。这个会话id具有唯一性,它的作用就是保证客户端的会话信息在服务器能够一一对应,具体来说,它会返回客户端一个cookie信息,其中包含session_id,这个cookie的键名、过期时间等是在php.ini中配置的,在服务器端,它会根据这个id以及php.ini配置的session存放路径,以id为文件名存放,之后对于这个id的session会话数据将存储在这个文件中,直到销毁。

三.为$_SESSION赋值

比如新添加一个值$_SESSION[‘test’] =’blah’; 那么这个$_SESSION只会维护在内存中,当脚本执行结束的时候,用把$_SESSION的值写入到session_id指定的文件夹中,然后关闭相关资源.这个阶段有可能执行更改session_id的操作,比如销毁一个旧的的session_id,生成一个全新的session_id.一半用在自定义 session操作,角色的转换上, 比如Drupal.Drupal的匿名用户有一个SESSION的,当它登录后需要换用新的session_id。

四.写入SESSION操作

在脚本结束的时候会执行SESSION写入操作,把$_SESSION中值写入到session_id命名的文件中,可能已经存在,可能需要创建新的文件。

五.销毁SESSION

SESSION发出去的COOKIE一般属于即时COOKIE,保存在内存中,当浏览器关闭后,才会过期,假如需要人为强制过期,比如 退出登录,而不是关闭浏览器,那么就需要在代码里销毁SESSION,方法有很多:

  1. setcookie(session_name(),session_id(),time() -8000000,..);//退出登录前执行
  2. usset($_SESSION);//这会删除所有的$_SESSION数据,刷新后,有COOKIE传过来,但是没有数据。
  3. session_destroy();//这个作用更彻底,删除$_SESSION 删除session文件,和session_id

当不关闭浏览器的情况下,再次刷新,2和3都会有COOKIE传过来,但是找不到数据.

linux常用命令英文含义

linux命令

linux系统,基于GPL开源,很伟大,以至于在计算机世界无处不在,我们已经离不开它了。现在的系统,基本上都有两种方式提供给用户获取系统资源的能力,一种是图形界面,一种就是命令行。作为用户,大多数人使用图形界面,因为它相对于命令行,交互性简直不要太好。但是对于开发人员,有时候命令行的效率可能更高,虽然这些命令很枯燥,很不好记,特别是linux的一些缩写,英语不太好的,表示咋看之下很难懂它的含义,以至于记不住,这里不知道大家的记忆方法是什么,我是那种靠理解记忆的,不懂含义,即使一个字母,在一句命令中,也是很难记住的。真实痛苦啊。。。

搜罗的常用linux命令含义

so, 只能去搜罗那些含义啦,幸好找到了不少,现在据为己有,哈哈。

ls:list(列出目录内容)

cd:Change Directory(改变目录)

su:switch user 切换用户

rpm:redhat package manager 红帽子打包管理器

pwd:print work directory 打印当前目录 显示出当前工作目录的绝对路径

ps: process status(进程状态,类似于windows的任务管理器) 常用参数:-auxf

ps -auxf 显示进程状态

df: disk free 其功能是显示磁盘可用空间数目信息及空间结点信息。换句话说,就是报告在任何安装的设备或目录中,还剩多少自由的空间。

rpm: 即RedHat Package Management,是RedHat的发明之一

rmdir:Remove Directory(删除目录)

rm:Remove(删除目录或文件)

cat: concatenate连锁 cat file1 file2>>file3把文件1和文件2的内容联合起来放到file3中

insmod: install module,载入模块

ln -s : link -soft 创建一个软链接,相当于创建一个快捷方式

mkdir:Make Directory(创建目录

touch

man: Manual

pwd:Print working directory

su:Swith user

cd:Change directory

ls:List files

ps:Process Status

mkdir:Make directory

rmdir:Remove directory

mkfs: Make file system

fsck:File system check

cat: Concatenate

uname: Unix name

df: Disk free

du: Disk usage

lsmod: List modules

mv: Move file

rm: Remove file

cp: Copy file

ln: Link files

fg: Foreground

bg: Background

chown: Change owner

chgrp: Change group

chmod: Change mode

umount: Unmount

dd: 本来应根据其功能描述“Convert an copy”命名为“cc”,但“cc”已经被用以代表“C Complier”,所以命名为“dd”

tar:Tape archive

ldd:List dynamic dependencies

insmod:Install module

rmmod:Remove module

lsmod:List module

文件结尾的”rc”(如.bashrc、.xinitrc等):Resource configuration

Knnxxx / Snnxxx(位于rcx.d目录下):K(Kill);S(Service);nn(执行顺序号);xxx(服务标识)

.a(扩展名a):Archive,static library

.so(扩展名so):Shared object,dynamically linked library

.o(扩展名o):Object file,complied result of C/C++ source file

RPM:Red hat package manager

dpkg:Debian package manager

apt:Advanced package tool(Debian或基于Debian的发行版中提供)

部分Linux命令缩

bin = BINaries #下面的是一些二进制程序文件

/dev = DEVices #下面的是一些硬件驱动

/etc = ETCetera #目录存放着各种系统配置文件, 类似于windows下的system

/lib = LIBrary

/proc = PROCesses

/sbin = Superuser BINaries

/tmp = TeMPorary

/usr = Unix Shared Resources

/var = VARiable ?

/boot=boot #下面的是开机启动文件

FIFO = First In, First Out

GRUB = GRand Unified Bootloader

IFS = Internal Field Seperators

LILO = LInux LOader

MySQL = My是最初作者女儿的名字,SQL = Structured Query Language

PHP = Personal Home Page Tools = PHP Hypertext Preprocessor

PS = Prompt String

Perl = “Pratical Extraction and Report Language” = “Pathologically Eclectic Rubbish Lister”

Python 得名于电视剧Monty Python’s Flying Circus

Tcl = Tool Command Language

Tk = ToolKit

VT = Video Terminal

YaST = Yet Another Setup Tool

apache = “a patchy” server

apt = Advanced Packaging Tool

ar = archiver

as = assembler

awk = “Aho Weiberger and Kernighan” 三个作者的姓的第一个字母

bash = Bourne Again SHell

bc = Basic (Better) Calculator

bg = BackGround

biff = 作者Heidi Stettner在U.C.Berkely养的一条狗,喜欢对邮递员汪汪叫。

cal = CALendar

cat = CATenate

cd = Change Directory

chgrp = CHange GRouP

chmod = CHange MODe

chown = CHange OWNer

chsh = CHange SHell

cmp = compare

cobra = Common Object Request Broker Architecture

comm = common

cp = CoPy

cpio = CoPy In and Out

cpp = C Pre Processor

cron = Chronos 希腊文时间

cups = Common Unix Printing System

cvs = Current Version System

daemon = Disk And Execution MONitor

dc = Desk Calculator

dd = Disk Dump

df = Disk Free

diff = DIFFerence

dmesg = diagnostic message

du = Disk Usage

ed = editor

egrep = Extended GREP

elf = Extensible Linking Format

elm = ELectronic Mail

emacs = Editor MACroS

eval = EVALuate

ex = EXtended

exec = EXECute

fd = file descriptors

fg = ForeGround

fgrep = Fixed GREP

fmt = format

fsck = File System ChecK

fstab = FileSystem TABle

fvwm = F*** Virtual Window Manager

gawk = GNU AWK

gpg = GNU Privacy Guard

groff = GNU troff

hal = Hardware Abstraction Layer

joe = Joe’s Own Editor

ksh = Korn SHell

lame = Lame Ain’t an MP3 Encoder

lex = LEXical analyser

lisp = LISt Processing = Lots of Irritating Superfluous Parentheses

ln = LiNk

lpr = Line PRint

ls = list

lsof = LiSt Open Files

m4 = Macro processor Version 4

man = MANual pages

mawk = Mike Brennan’s AWK

mc = Midnight Commander

mkfs = MaKe FileSystem

mknod = MaKe NODe

motd = Message of The Day

mozilla = MOsaic GodZILLa

mtab = Mount TABle

mv = MoVe

nano = Nano’s ANOther editor

nawk = New AWK

nl = Number of Lines

nm = names

nohup = No HangUP

nroff = New ROFF

od = Octal Dump

passwd = PASSWorD

pg = pager

pico = PIne’s message COmposition editor

pine = “Program for Internet News & Email” = “Pine is not Elm”

ping = 拟声 又 = Packet InterNet Grouper

pirntcap = PRINTer CAPability

popd = POP Directory

pr = pre

printf = PRINT Formatted

ps = Processes Status

pty = pseudo tty

pushd = PUSH Directory

pwd = Print Working Directory

rc = runcom = run command, rc还是plan9的shell

rev = REVerse

rm = ReMove

rn = Read News

roff = RunOFF

rpm = RPM Package Manager = RedHat Package Manager

rsh, rlogin, rvim中的r = Remote

rxvt = ouR XVT

seamoneky = 我

sed = Stream EDitor

seq = SEQuence

shar = SHell ARchive

slrn = S-Lang rn

ssh = Secure SHell

ssl = Secure Sockets Layer

stty = Set TTY

su = Substitute User

svn = SubVersioN

tar = Tape ARchive

tcsh = TENEX C shell

tee = T (T形水管接口)

telnet = TEminaL over Network

termcap = terminal capability

terminfo = terminal information

tex = τέχνη的缩写,希腊文art

tr = traslate

troff = Typesetter new ROFF

tsort = Topological SORT

tty = TeleTypewriter

twm = Tom’s Window Manager

tz = TimeZone

udev = Userspace DEV

ulimit = User’s LIMIT

umask = User’s MASK

uniq = UNIQue

vi = VIsual = Very Inconvenient

vim = Vi IMproved

wall = write all

wc = Word Count

wine = WINE Is Not an Emulator

xargs = eXtended ARGuments

xdm = X Display Manager

xlfd = X Logical Font Description

xmms = X Multimedia System

xrdb = X Resources DataBase

xwd = X Window Dump

yacc = yet another compiler compiler

Fish = the Friendly Interactive SHell

su = Switch User

MIME = Multipurpose Internet Mail Extensions

ECMA = European Computer Manufacturers Association

git代码托管服务之码云其实也不错

被我忽视的代码托管gitee码云

其实在2015年码云这个词出来的时候,就大概知道它是干嘛的,但是,也许是高度跟马云爸爸重名的原因吧,很是避讳,而且当时github作为业界的标杆,无论是成熟度还是知名度都不是后来者码云能比的,所以也就没有去使用这个产品。为什么现在开始要使用了呢?原因如下:

  • 网速
  • 网速
  • 网速

总要的事情说三遍。。。其实还有其他原因,是因为码云的功能也对标github了,提供的定制服务也想当健全了,虽然对我来说我还没用上(笑),但是有一个很重要的东西,不能没有。之前一直忽视码云,感觉身边人用的也少,一不小心错过了它发展的新闻,竟然最近才得知,码云其实也支持pages功能,虽然人家在2016年就开始提供这个服务了。(笑哭)

不想放弃github也想托管码云,怎么办

码云是后来者,所以提供了一个可以导入项目的功能,这个可以直接将github上的代码同步到码云上来,很方便。然后就是在本地开发,想要同步两个仓库的问题。以前,我们没有这个问题,我们直接是一个远程origin,这一套玩儿法我们已经很熟悉了,那再来一个仓库,要怎么同时同步呢?答案对于超级熟悉git的人来说应该很容易,但是很多人是只是熟悉普通的git命令, 大家通常是去百度或者google,其实我也是(笑),嘿嘿。百度之后,就知道,一个本地git项目其实是很容易可以添加两个甚至多个远程仓库的,命令为git remote add [name_your_remote_channel] master

说说码云的pages功能

码云的pages功能相比于github的pages功能,对于我们国内来说有,那速度就爽翻了,个人展示类项目和博客,打开速度从此告别2G时代,很爽。