❶ php swoole 只能运行在php-cli 环境吗
一直想写点Swoole的东西,毕竟它重新定义了php,却一直不知道怎么下手写Swoole涉及的知识点非常多,互为表里,每次想写都发现根本理不出一个头绪Swoole是一个php的扩展,它的核心目的就是解决php在实现server服务中可能遇到的一系列问题,这些问题用源生的php往往并不能很高效(执行效率)的解决,一般也不会使用php来解决,所以会有说swolle重新定义的php的说法。
其实swoole也提供了一个框架,swoole framework是基于swoole extension设计的一个框架,要用好这个框架,还是要先了解swoole extension。
扩展的英文名称是Extension,php扩展是用C语言作为开发语言,基于Zend引擎提供的API,编译成的一个动态库。
如果曾经做过类似动态库调用开发的童鞋可能会更好理解一些,例如Android中的NDK开发在php的配置文件中配置好extension的属性后,就可以引用这个动态库了。
也就是说,swoole本身是用C语言编写的,它可以让php获得一些额外的function。
然后是运行方式,swoole的许多功能都只能运行在cli模式下,而cli模式往往是很多刚接触swoole的phper遇到的第一个问题。
有时候其实只是需要转变一下思路
我们现在整理一下最常见的php代码执行方式:
安装apache、php
配置apache对那个目录进行php解析
用浏览器访问那个目录的php文件
更多的细节这里就不提了,毕竟我相信每个phper对这个都是很熟悉的。
但这里就开始出现了第一个问题,我们知道,php是一个脚本语言,脚本语言的核心特点在于不用编译,随时执行,而执行脚本的工具就是解析器,而php的解析器就是zend引擎。
严格来说,zend并不是唯一的选择,不过,zend是最官方的。另外,Zend Studio和Zend Engine不是同一个东西,本文中的Zend全部指Zend Engine。
换个角度讲,只要有解析器,写好的php脚本就是可以执行的,而zend引擎与apache之间并没有绝对的关系实际上,apahce是调用了zend对php脚本进行执行,然后将执行结果输出给了浏览器所以所谓cli模式(CommandLine,命令行模式),其实就是在命令行下直接调用zend引擎对php脚本进行解析并执行,并获得程序输出结果的php脚本执行方式。
其实php也可以作为shell脚本来使用哦,就像bash shell一样既然问题讲清楚了,在一个系统中具体怎么操作呢?
本文以CentOS 7.5作为系统环境,swoole是针对linux系统开发的,windows下并不适用。学习swoole的一个前题是懂得基本的linux系统使用。
当安装好php的时候,找到php的安装目录,如果是默认安装的话,可以试试whereis命令# 某种简单的方法
whereis php
> /usr/local/bin/php;
locate whereis find这些命令都可以试试,目的是找到php然后我们来写一个最经典的php脚本:
<?php
//vi hello_cli.php
echo 'Hello PHP Cli';
编写纯php脚本时,php标签不要封口
然后我们在shell里执行它:
/usr/local/bin/php hello_cli.php
> Hello PHP Cli
这段代码中的第一个php,是一个可执行文件,它接受一个php脚本文件作为输入参数,并解析执行这个php脚本文件(通过zend)。
没有错,第一个cli模式下的php程序就被你执行成功了!
默认情况下,php都会被安装在了$PATH的目录下,那就可以直接省略路径前缀了,下文中调用php的时候,全都省略了路径前缀。
因为swoole是pecl的项目,所以使用pecl安装是最简单的方法,强烈推荐第一次接触的童鞋先使用pecl安装,在熟悉了swoole之后,再考虑使用编译安装的方式以获取更多进阶功能。
pecl这个工具基本都会被安装在与php相同的目录下(往往也都是$PATH目录)pecl install swoole
执行以下命令查看是否安装成功:
php -m | grep swoole
> swoole
如果正确的输出了swoole,那么恭喜你,这次安装很成功另一个常见的比较麻烦的问题是,有些童鞋的电脑里安装了多个php,而安装的时候没有正确的安装到预期的php的扩展目录中,就会导致无法正常工作,解决方案就是弄清楚各个php安装目录及配置关系,选择正确的目录进行安装。
其实本文还没正式开始介绍swoole,都是在学习swoole之前的准备工作,swoole的上手门槛比一般的php应用要高的多,如果没有网络开发和操作系统方面的一些知识,学习它并不是一件容易的事情,学习曲线很陡峭。
这句话我在群里说了无数次
很多新手会诟病swoole的手册写的太模糊,其实是前置知识不足,而手册也给出了需要的前置知识列表,以下引用至官网的手册-学习swoole需要哪些知识?
多进程/多线程
了解Linux操作系统进程和线程的概念
了解Linux进程/线程切换调度的基本知识
了解进程间通信的基本知识,如管道、UnixSocket、消息队列、共享内存socket
了解SOCKET的基本操作如accept/connect、send/recv、close、listen、bind了解SOCKET的接收缓存区、发送缓存区、阻塞/非阻塞、超时等概念IO复用
了解select/poll/epoll
了解基于select/epoll实现的事件循环,Reactor模型了解可读事件、可写事件
TCP/IP网络协议
了解TCP/IP协议
了解TCP、UDP传输协议
调试工具
使用gdb调试Linux程序
使用strace跟踪进程的系统调用
使用tcpmp跟踪网络通信过程
其他Linux系统工具,如ps、lsof、top、vmstat、netstat、sar、ss等学习并理解一个新事务并不是一个容易的事情,特别对于swoole这种具备一定颠覆性的工具,要有耐心和实践。
淡定的把手册看完,遇到不理解的名词学会使用搜索引擎学习,swoole的手册其实是个大宝库,网络开发常见的问题其实里边都涉及到了。
❷ php rpc好用吗,有什么优缺点php rpc框架哪个好
什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procere Call)那什么是远程调用?通常我们调用一个php中的方法,比如这样一个函数方法: localAdd(10, 20),localAdd方法的具体实现要么是用户自己定义的,要么是php库函数中自带的,也就说在localAdd方法的代码实现在本地,它是一个本地调用!远程调用意思就是:被调用方法的具体实现不在程序运行本地,而是在别的某个远程地方。
远程调用原理
比如 A (client) 调用 B (server) 提供的remoteAdd方法:
首先A与B之间建立一个TCP连接;
然后A把需要调用的方法名(这里是remoteAdd)以及方法参数(10, 20)序列化成字节流发送出去;
B接受A发送过来的字节流,然后反序列化得到目标方法名,方法参数,接着执行相应的方法调用(可能是localAdd)并把结果30返回;
A接受远程调用结果,输出30。
RPC框架就是把我刚才说的这几点些细节给封装起来,给用户暴露简单友好的API使用。
远程调用的好处
解耦:当server需要对方法内实现修改时,client完全感知不到,不用做任何变更;这种方式在跨部门,跨公司合作的时候经常用到,并且方法的提供者我们通常称为:服务的暴露。
RPC与Socket有什么区别?
通过上面的简单阐述,好像RPC与Socket 好像啊。都是调用远程的方法,都是client/server模式,我之前也写了一篇文章: 细说socket 那他们有啥区别呢?
RPC(远程过程调用)采用客户机/服务器模式实现两个进程之间相互通信。socket是RPC经常采用的通信手段之一,RPC是在Socket的基础上实现的,它比socket需要更多的网络和系统资源。除了Socket,RPC还有其他的通信方法,比如:http、操作系统自带的管道等技术来实现对于远程程序的调用。微软的Windows系统中,RPC就是采用命名管道进行通信。
RPC与REST有什么区别?
通过了解RPC后,我们知道是RPC是client/server模式的,调用远程的方法,REST也是我们熟悉的一套API调用协议方法,它也是基于client/server模式的,调用远程的方法的,那他俩又有啥区别呢?
REST API 和 RPC 都是在 Server端 把一个个函数封装成接口暴露出去,以供 Client端 调用,不过 REST API 是基于HTTP协议的,REST致力于通过http协议中的POST/GET/PUT/DELETE等方法和一个可读性强的URL来提供一个http请求。而 RPC 则可以不基于 HTTP协议
因此,如果是后端两种语言互相调用,用 RPC 可以获得更好的性能(省去了 HTTP 报头等一系列东西),应该也更容易配置。如果是前端通过 AJAX 调用后端,那么用 REST API 的形式比较好(因为无论如何也避不开 HTTP 这道坎)。
php中流行的rpc框架有哪些
既然php是世界上最好的语言,那php中流行的RPC框架有哪些呢?
先列举下: phprpc,yar, thrift, gRPC, swoole, hprose
因为时间和精力有限,不可能一个一个的去学习和使用,我选几个世面上用的最多的几个用下吧。因为RPC原理是一样的,都是Client/Server模式,只是每个框架的使用方式不一样而已。
❸ 如何使用php中oauth开发包及oauth
windows的下载地址:http://pecl.php.net/package/oauth/1.2.3/windows
需要此文件php_oauth.dll
放入/bin/php[version]/ext
您需要更改 php.ini 加载 oauth (动态扩展)
extension=php_oauth.dll
linux的下载地址:http://pecl.php.net/get/oauth-1.2.3.tgz
tar -zxf oauth-1.2.3.tgz && cd oauth-1.2.3
/usr/local/php5/bin/phpize
/configure --with-php-config=/usr/local/php5/bin/php-config
make && make install
vi php.ini #修改php配置文件加载oauth扩展
添加extension="oauth.so"
使用篇:
$req_url = 'https://oauth.lvtao.net/oauth/request_token';
$authurl = 'https://www.j66.org/oauth';
$acc_url = 'https://oauth.lvtao.net/oauth/access_token';
$api_url = 'https://oauth.lvtao.net/api/0.1';
$conskey = 'your_consumer_key';
$conssec = 'your_consumer_secret';
session_start();
// In state=1 the next request should include an oauth_token.
// If it doesn't go back to 0
if(!isset($_GET['oauth_token']) && $_SESSION['state']==1) $_SESSION['state'] = 0;
try {
$oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HmacSHA1,OAUTH_AUTH_TYPE_URI);
$oauth->enableDebug();
if(!isset($_GET['oauth_token']) && !$_SESSION['state']) {
$request_token_info = $oauth->getRequestToken($req_url);
$_SESSION['secret'] = $request_token_info['oauth_token_secret'];
$_SESSION['state'] = 1;
header('Location: '.$authurl.'?oauth_token='.$request_token_info['oauth_token']);
exit;
} else if($_SESSION['state']==1) {
$oauth->setToken($_GET['oauth_token'],$_SESSION['secret']);
$access_token_info = $oauth->getAccessToken($acc_url);
$_SESSION['state'] = 2;
$_SESSION['token'] = $access_token_info['oauth_token'];
$_SESSION['secret'] = $access_token_info['oauth_token_secret'];
}
$oauth->setToken($_SESSION['token'],$_SESSION['secret']);
$oauth->fetch("$api_url/user.json");
$json = json_decode($oauth->getLastResponse());
print_r($json);
} catch(OAuthException $E) {
print_r($E);
}
❹ php 怎么安装扩展
在windows平台上,主要是三个步骤:
1、下载php扩展库文件;
一般在http://pecl.php.net/上就有下载信息。
2、解压缩文件,将*.dll文件复制到PHP程序主目录下的“ext”或者“extension”目录。
3、打开php.ini文件,在“Dynamic Extensions”配置段中加上“extension=*.dll”,关闭文件,重新启动一下服务器就可以加载成功了。
❺ 如何捋清楚php的pecl和pear,composer三者的区别与联系
这三者都与php相关,pecl是php的一种规范,pear是php开发的一个库,composer是一个安装插件库的软件。
希望我的回答可以帮到你,有什么不懂可以追问。
❻ php中的pecl是什么
从网络中的介绍看应该是过滤的
可以参照《大道PHP:LAMP+ZEND+开源框架组合开发与实战》这本书 里面应该有这个库的介绍以及功能的使用等
❼ PECL的简介
PECL 的全称是 The PHP Extension Community Library ,是一个开放的并通过 PEAR(PHP Extension and Application Repository,PHP 扩展和应用仓库)打包格式来打包安装的 PHP 扩展库仓库。通过 PEAR 的 Package Manager 的安装管理方式,可以对 PECL 模块进行下载和安装。与以往的多数 PEAR 包不同的是,PECL 扩展包含的是可以编译进 PHP Core 的 C 语言代码,因此可以将 PECL 扩展库编译成为可动态加载的 .so 共享库,或者采用静态编译方式与 PHP 源代码编译为一体的方法进行扩展。PECL 扩展库包含了对于 XML 解析,数据库访问,邮件解析,嵌入式的 Perl 以及 Pthyon 脚本解释器等诸多的 PHP 扩展模块,因此从某种意义上来说,在运行效率上 PECL 要高于以往诸多的 PEAR 扩展库。
❽ 如何安装pecl
phpeclipse配置安装教程详解
1.解压本站下载phpeclipse插件,你会发现该解压文件夹下会存在features和plugins两个文件夹还有1个site.xml文件
2.使用PHPEclipse 之前, 需要安装以下软件:
1)、Eclipse 3.1.x
2)、J2SE 5.0
3)、DBG PHP Debugger matching the PHP version you are using
4)、Eclipse Web Tools Platform Project 1.0.x
3.将features和plugins中的内容复制到Eclipse的相应文件夹下,将site.xml复制到Eclipse的根目录即可。然后启动Eclipse(如果Eclipse已经启动,则重启Eclipse以使新添加的文件生效)。
5.如图所示,依次选择“Window>>Open Perspective>>Other…”,打开视图选择窗口。
6.在“Open Perspective”(视图选择)窗口中,找到“PHP”选项并双击,将在Eclipse中添加PHP视图。
7.添加成功后,会在Eclipse右上角看到“PHP”的视图选项,单击按钮即可将Eclipse切换到PHP视图。
7.在Eclipse中依次选择“Window>>Preferences”,在弹出的Preferences窗口的从左侧菜单栏中依次点击“PHPeclipse>>PHP External Tools”,修改PHP配置信息。同时,我们发现“PHP External Tools”下包含三个子菜单:Apache、MySQL、XAMPP,用于设置Apache、MySQL、XAMPP的配置信息。
8.点击“Apache”子菜单,修改Apache配置信息。将Apache路径修改为本机安装路径。修改样例如图所示,具体值以自己电脑为准。
9.修改MySQL配置信息,修改样例如图所示,具体值以自己电脑为准。
10.修改XAMPP配置信息,修改样例如图所示,具体值以自己电脑为准。修改完毕后点击“OK”保存修改内容。
❾ php中的PEAR,PECL,APC是什么
PECL是扩展库,用PEAR命令安装,APC是Alternative PHP Cache的简称,是一种缓存技术。
❿ php5.4对于pear,pecl怎么使用兼容吗
如果是自用,pear和pecl都不用急着装,用到什么再装什么。
特别是win版几乎已经包括了大部分的pecl组件。
pear的用处不是很大,依赖pear的代码会比较慢。通常可以参考。
安装方法,先下go-pear.phar 文件
http://pear.php.net/go-pear.phar
然后在命令行运行:
php go-pear.phar
会提示选项,选择要安装的包,然后开始安装
Direct IO是posix环境的组件,即主要用于linux环境,win下不用不具备。
是直接操作OS操作系统提供的文件访问的接口。
在linux下所有的硬件设备都是文件形式。所以这种直接操作主要用于操作硬件IO,而不是设计用来读写传统磁盘文件。如果不用linux,如果不用直接和设备通讯,基本不需要使用这个库。