分类 IT技术 下的文章

Window下的PHP命令行工具

本章介绍基于Windows PowerShell下 PHP命令行技巧

PowerShell

PowerShell(包括Windows PowerShell and PowerShell Core)是微软公司开发的任务自动化和配置管理框架,由.NET Framework.NET Core是构建的命令行界面壳层相关脚本语言组成,最初仅Windows组件,后于2016年8月18日开源跨平台支持

UNIX系统一直有着功能强大的壳程序(shell),Windows PowerShell的诞生就是要提供功能相当于UNIX系统的命令行壳程序(例如:shbashcsh),同时也内置脚本语言以及辅助脚本程序的工具。

定义命令别名

查看别名
  • 查看此Session中已经设定的所有别名:Get-Aliasgal

PS C:\> gal
  • 查看某别名的原命令,如ls的原命令:> Get-Alias ls

  • 查看某原命令的别名,如Get-ChildItem的别名:> Get-Alias -Definition Get-ChildItem

创建别名

​ 创建别名有两个方法可用New-AliasSet-Alias ;其中New-Alias 可以创建别名,但是不能更改;Set-Alias 可以创建或更改别名。

​ 注意:通过命令创建的别名只能在当前回话中生效,关闭回话窗口后回自动失效;创建永久别名需要在后面有详细介绍。

给记事本创建一个别名,并运行:

C:\PS> Set-Alias Edit notepad
C:\PS> Edit //打开记事本

//电脑中notepad++的程序路径为 E:\Program Files (x86)\Notepad++\notepad++.exe
C:\PS> Set-Alias Edit "E:\Program Files (x86)\Notepad++\notepad++.exe"
C:\PS> Edit //打开Notepad++程序
删除别名

​ 别名不用删除,自定义的别名在powershell退出时会自动清除。但是请放心,powershell内置别名(诸如ls,dir,fl等)不会清除。如果你非得手工删除别名。请使用

PS C:\PS> del alias:Edit
创建永久的别名

​ 在PowerShell中直接使用Set-AliasNew-Alias命令创建的别名在关闭此Session后即会失效,防止此现象的方法是将此命令写入Windows PowerShell profile文件。

​ 查看此文件在计算机中的位置:

PS C:\> $profile //实际上显示的路径文件不存在

​ 一般该文件在没有创建前是不存在的,使用以下命令为当前用户创建profile命令并返回文件地址:

PS C:\> New-Item -Type file -Force $profile //执行该命令回创建相应的文件,

​ 注意:首次在计算机上启动 Windows PowerShell 时,现用执行策略很可能是 Restricted(默认设置)。Restricted 策略不允许任何脚本运行。请在PowerShell中执行如下命令:

set-ExecutionPolicy RemoteSigned 
// 执行策略更改提示
// 执行策略可以防止您执行不信任的脚本。更改执行策略可能会使您面临 about_Execution_Policies 帮助主题中所述的安全风险。是否要更改执行策略? [Y] 是(Y) [N] 否(N) [S] 挂起(S) [?] 帮助 (默认值为“Y”): y 
// 修改后即可执行脚本。

PowerShell脚本四种执行权限:

Restricted——默认的设置, 不允许任何script运行

AllSigned——只能运行经过数字证书签名的script

RemoteSigned——运行本地的script不需要数字签名,但是运行从网络上下载的script就必须要有数字签名

Unrestricted——允许所有的script运行

若要了解计算机上的现用执行策略,请键入:get-executionpolicy

设置常用永久命令:

打开生成的profile文件:C:\Users\geek100\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Set-Alias Edit "E:\Program Files (x86)\Notepad++\notepad++.exe"
Set-Alias php56 "E:\phpStudy\PHPTutorial\php\php-5.6.27-nts\php.exe"
Set-Alias php72 "E:\phpStudy\PHPTutorial\php\php-7.2.1-nts\php.exe"
Set-Alias mysql "E:\phpStudy\PHPTutorial\MySQL\bin\mysql.exe"
Set-Alias mysql "E:\phpStudy\PHPTutorial\MySQL\bin\mysql.exe"
Set-Alias mysqldump "E:\phpStudy\PHPTutorial\MySQL\bin\mysqldump.exe"

重启PowerShell,在命令窗口中执行如下命令体验下效果吧:

PS C:\Users\geek100\Documents> Edit    //打开编辑器
PS C:\Users\geek100\Documents> mysql -h'127.0.0.1' -uroot -p //打开MySQL终端
PS C:\Users\geek100\Documents> mysqldump -h'127.0.0.1' -uroot -p test > test.sql //导出
PS C:\Users\geek100\Documents> php72 -i //查看phpinfo信息
PS C:\Users\geek100\Documents> php72 -v    //查看php版本信息

PHP命令行

一下是PHP官网相关一些介绍,具体介绍请查看《PHP命令行模式

从版本 4.3.0 开始,PHP 提供了一种新类型的 CLI SAPI(Server Application Programming Interface,服务端应用编程端口)支持,名为 CLI,意为 Command Line Interface,即命令行接口。顾名思义,该 CLI SAPI 模块主要用作 PHP 的开发外壳应用。CLI SAPI 和其它 CLI SAPI 模块相比有很多的不同之处,我们将在本章中详细阐述。值得一提的是,CLI和 CGI 是不同的 SAPI,尽管它们之间有很多共同的行为;

关于root账号下cron任务不执行问题处理

今天业务反馈某个定时任务不生效了。重新去查看配置定时任务, 执行命令sudo crontab -e 时提示如下错误:

鉴定令牌不再有效;需要新的鉴定令牌
You (root) are not allowed to access to (crontab) because of pam configuration.

问题排查过程:

  1. 然后就检查当前用户下的定时任务是否正常, 运行 crontabe -e 一切正常,说明应该不是cron软件的问题。

  2. sudo su root 切换到 root 账号下执行 crontab -e 仍然提示同样的错误信息。

  3. 查询系统日志 tail -n 100 , 有类似如下信息提示, root该用户密码过期了

crond[32181]: pam_unix(crond:account): expired password for user root (password aged)
  1. 重新修改下 root 用户密码后恢复正常, 问题解决~

Mac下homebrew 更新及重启服务

Brew 是 Mac 下面的包管理工具,通过 Github 托管适合 Mac 的编译配置以及 Patch,可以方便的安装开发工具。
因为个人记忆力不好, 经常忘记命令,所以把常用到的命令记录如下:

 brew doctor                        #自检
 brew update                        #更新brew可安装包,建议每次执行一下
 brew search php55                  #搜索php5.5
 brew tap josegonzalez/php          #安装扩展<gihhub_user/repo>   
 brew tap                           #查看安装的扩展列表
 brew install php55                 #安装php5.5
 brew remove  php55                 #卸载php5.5
 brew upgrade php55                 #升级php5.5
 brew options php55                 #查看php5.5安装选项
 brew info    php55                 #查看php5.5相关信息
 brew home    php55                 #访问php5.5官方网站
 brew services list                 #查看系统通过 brew 安装的服务
 brew services cleanup              #清除已卸载无用的启动配置文件
 brew services restart php55        #重启php-fpm

Hybrid App开发入门(一)

1、什么是Hybrid App?

介绍Hybrid App之前首先需要了解目前主流手机应用程序有哪些?

  • Native App

  • Web App

  • Hybrid App

HyBrid App开发入门

Native App 是一个原生程序,一般运行在机器操作系统上,有很强的交互,一般静态资源都是在本地的。浏览使用方便,体验度高。在实现上要么使用Objecttive-c/swift和cocoaTouch Framework撰写IOS程序,要么选择java+Android Framework撰写android应用程序,具备设备访问能力。

Web App 是生存在浏览器里的应用,所以只能运行在浏览器里,宿主是浏览器,不再是操作系统。资源一般都在网络上。本质上是一个触屏版的网站。不具备设备访问能力。

Hybrid App 是指介于web-app、native-app这两者之间的app,它虽然看上去是一个Native App,但只有一个UI WebView,里面访问的是一个Web App,但是还是运行在机器的操作系统上,交互较弱,资源一般在本地或者网络都可以。具备设备访问能力。

三者优缺点对比

应用类型优点缺点
Native App(1). 打造完美的用户体验 (2). 性能稳定 (3). 操作速度快,上手流畅 (4). 访问本地资源(通讯录,相册) (5). 设计出色的动效,转场 (6). 拥有系统级别的贴心通知或提醒 7.用户留存率高(1). 分发成本高(不同平台有不同的开发语言和界面适配) (2). 维护成本高(例如一款App已更新至V5版本, 但仍有用户在使用V2, V3, V4版本, 需要更多的开发人员维护之前的版本) (3). 更新缓慢,根据不同平台, 提交–审核–上线 等等不同的流程,需要经过的流程较复杂
Web App(1). 开发成本低 (2). 更新快 (3). 更新无需通知用户,不需要手动升级 (4). 能够跨多个平台和终端(1). 临时性的入口 (2). 无法获取系统级别的通知,提醒,动效等 (3). 用户留存率低 (4). 设计受限制诸多 (5). 体验较差
Hybrid App(1). 跨平台,一次开发,所有平台生效 (2). 快速发布,应用内更新不需要提交到AppStore (3). 开发高效成本低,通过HTML+CSS+Javascript开发应用 (4). 丰富的Device API, 通过桥接可以直接调用设备API(1). 图形和动画渲染效果较差,CPU/GPU密集类应用目前看更适合Native (2). 静态资源从服务器端加载导致的UI展示延迟问题

三者属性对比

类型WebHybridNative
开发成本
维护更新简单简单复杂
体验
应用市场认可不认可认可认可
安装不需要需要需要
跨平台
图像渲染HTML,Canvas,CSS混合本地API渲染
原生界面模仿部分原生,部分模仿原生
原生API不可调用可调用可调用
网络要求全部依赖大部分依赖支持离线

2.Hybrid App开发方案

方案一 重混合应用, 在开发原生应用的基础上,嵌入WebView但是整体的架构使用原生应用提供,一般这样的开发由Native开发人员和Web前端开发人员组成。Native开发人员会写好基本的架构以及API让Web开发人员开发界面以及大部分的渲染。保证到交互设计,以及开发都有一个比较折中的效果出来,优化得好也会有很棒的效果。 
Hybrid App技术发展的早期, Web的运行性能成为主要瓶颈!
为解决性能问题Hybrid App走向“ 重混”。

通过多WebView:实现流畅的多页加载和专场动画。

使用Navtive UI 组件:框架、菜单、日期等。

“重混”的优缺点

优点

– 提升了运行性能
– 增强了交互体验

缺点

– Web和Native技术交叉混杂
– 需要同时掌握Web和Native技术, 学习难度增加
– 一个页面有Web组件也有Native组件, 编程调试困难

方案二:轻混合应用, 使用PhoneGap、AppCan之类的中间件,以WebView作为用户界面层,以Javascript作为基本逻辑,以及和中间件通讯,再由中间件访问底层API的方式,进行应用开发。这种架构一般会非常依赖WebView层的性能。
随着时代的发展, 手机硬件、浏览器技术、无线网络技术都得到了大幅的提升,H5已经可以支持复杂应用, 并拥有良好的运行性能。使用轻混方案的App也越来越多。

目前我们要学习的Hybrid App开发就是方案二, 使用H5+Js+Native框架开发当前轻混合应用。

顺变提一下, 2012年8月, 微信公众平台的上线,重新定义了移动应用: 移动应用 = Iphone App + Android App + 微信App

3.Hybrid框架结构

HyBrid App = H5 App + Native框架

  • H5App 用来实现功能逻辑和页面渲染

  • Native框架 提供WebView和设备接口供H5调用

H5 App

简单理解就是以网页技术为主来实现的移动应用。H5 App由网页和外壳两部分组成。 网页主要负责界面的显示和交互; 而外壳会内置一个浏览器来提供网页的运行环境, 并且会通过插件为网页提供扩展的原生调用能力,如下图:
H5架构.png

H5 App简单分为:
  • 多页应用模式MPA( Multi Page Application)

MPA.png

  • 单页应用模式SPA( Single Page Application)

SPA.png

综合上图对比, H5 App页面框架的最佳选择:SPA单页应用模式!!

单页应用的核心问题: 页面隔离! 解决方案如下图所示:

图片1.png
图片2.png

Native框架:

Cordova(PhoneGap)

业界最主流的开源移动跨端框架

HTML + CSS + JS + 原生插件
开放式的原生插件框架
干净的轻混合跨端框架

 
支持公司:
company.png

Hybrid App开发所需技能一览表

  • HTML5

  • CSS3

  • JavaScript

    JavaScript基础:基本语法、面向对象等,能使用JavaScript编写程序。
    Angular : 优秀前端JS框架
    RequireJs : 模块隔离,资源按需加载
    WebPack: 模块加载器兼打包工具
    Avalon: MVVM数据绑定框架(选学)
    Node.js: 服务器端语言, 会这个就前后端统统可以搞定,瞬间成全栈工程师 
Hybrid App开发框架推荐
  • Framework7

  • Ionic


下次分享如何开发一个简单的Hybrid App:

  • Cordova使用

  • 如何使用Cordova插件访问设备接口

  • 如何将H5App打包成App

CentOS6.5安装为PHP安装memcached扩展

PHP环境版本

CentOS6.5的PHP版本为5.6.21通过yum方式安装的, memcache扩展已经通过yum 方式安装好了

首先需要下载并安装libmemcached

因为memcached扩展是基于libevent的事件处理的, 首先需要安装libmemcached
下载地址
解压并安装:

tar zxf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure --prefix=/usr/local/libmemcached --with-memcached//注意:--with-memcached这个选项一定要加上
make
make install

注意:如果需要适用sasl, 也可以在安装libmemcahced前安装cyrus-sasl-devel:

yum install cyrus-sasl-devel

安装memcached扩展

首先下载memcached扩展, 下载地址
解压并安装:

tar zxf memcached-2.2.0.tgz
cd zxf memcached-2.2.0
phpize
./configure --with-php-config=/usr/bin/php-config --disable-memcached-sasl --with-libmemcached-dir=/usr/local/libmemcached
make
make test
make install

注意:如果不使用--disable-memcached-sasl安装过程中会提示

error 'configure: error: no, sasl.h is not available. Run configure with --disable-memcached-sasl to disable this check '

至此php的memcached扩展安装完毕, 重启php-fpm 即可生效。