php的cli命令行接口

php-cli

cli:Command Line Interface 命令行接口,php可以不依赖apache的IIS而通过cli命令行接口进行运行,因为php的本质是C的程序;

windows和linux下都支持php_cli模式 注意:php5后php.exe就是cli

windows环境中:

eg: D:\>D:\mysoft\phpstudy\php53n\php.exe D:\mysoft\phpstudy\WWW\self\server.php [服务端]

eg: D:\>D:\mysoft\phpstudy\php53n\php.exe D:\mysoft\phpstudy\WWW\self\server.php [客户端]

示例代码:

<?php

/**
* File name server.php
* 服务器端代码
*  
* @author guisu.huang
* @since 2012-04-11
*  
*/

//确保在连接客户端时不会超时  
set_time_limit(0);  
//设置IP和端口号  
$address = "127.0.0.1";  
$port = 2053; //调试的时候,可以多换端口来测试程序!  
/**
* 创建一个SOCKET  
* AF_INET=是ipv4 如果用ipv6,则参数为 AF_INET6
* SOCK_STREAM为socket的tcp类型,如果是UDP则使用SOCK_DGRAM
*/  
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");  
//阻塞模式  
socket_set_block($sock) or die("socket_set_block() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");  
//绑定到socket端口  
$result = socket_bind($sock, $address, $port) or die("socket_bind() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");  
//开始监听  
$result = socket_listen($sock, 4) or die("socket_listen() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");  
echo "OK\nBinding the socket on $address:$port ... ";  
echo "OK\nNow ready to accept connections.\nListening on the socket ... \n";  
do { // never stop the daemon  
//它接收连接请求并调用一个子连接Socket来处理客户端和服务器间的信息  
$msgsock = socket_accept($sock) or  die("socket_accept() failed: reason: " . socket_strerror(socket_last_error()) . "/n");

//读取客户端数据  
echo "Read client data \n";  
//socket_read函数会一直读取客户端数据,直到遇见\n,\t或者\0字符.PHP脚本把这写字符看做是输入的结束符.  
$buf = socket_read($msgsock, 8192);  
echo "Received msg: $buf   \n";

//数据传送 向客户端写入返回结果  
$msg = "welcome \n";  
socket_write($msgsock, $msg, strlen($msg)) or die("socket_write() failed: reason: " . socket_strerror(socket_last_error()) ."/n");  
//一旦输出被返回到客户端,父/子socket都应通过socket_close($msgsock)函数来终止  
socket_close($msgsock);  
} while (true);  
socket_close($sock);

客户端:client.php

<?php

/**
 * File name:client.php
 * 客户端代码
 *  
 * @author guisu.huang
 * @since 2012-04-11
 */  
set_time_limit(0);  
 
$host = "127.0.0.1";  
$port = 2053;  
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)or die("Could not create  socket\n"); // 创建一个Socket  
   
$connection = socket_connect($socket, $host, $port) or die("Could not connet server\n");    //  连接  
socket_write($socket, "hellofindyoufindme socket") or die("Write failed\n"); // 数据传送 向服务器发送消息  
while ($buff = socket_read($socket, 1024, PHP_NORMAL_READ)) {  
    echo("Response was:" . $buff . "\n");  
}  
socket_close($socket);

?>

用cli上面的eg ,请结合自己的文件位置;

server.php的输出结果是:

client.php端出现如下情况:

这是因为程序执行了socket_close();

以上是一个启动并执行的实例:

另外说一下php-cli的特点或者说是优点:

优点:

1. 使用多进程, 子进程结束以后, 内核会负责回收资源
2. 使用多进程,子进程异常退出不会导致整个进程Thread退出. 父进程还有机会重建流程.
3. 一个常驻主进程, 只负责任务分发, 逻辑更清楚.

时间: 09-16

php的cli命令行接口的相关文章

CLI命令行接口

[[email protected] ~]#COMMAND 命令提示符root:当前登录的用户itxuezhe:当前主机名~:用户当前所在的目录,即工作目录#:命令提示符#:管理员帐号,为root,拥有最高权限,能执行所有操作:$:普通用户,非root用户,不具有管理权限,不能执行系统管理类操作: 注意:建议使用非管理员帐号登录: 执行管理操作临时切换至管理员,操作完成即退回普通用户: 原文地址:http://blog.51cto.com/itxuezhe/2337306

linux命令格式,获取帮助及其目录结构简要理解

我们都知道,一台计算机要是没通电,和一堆废铁没什么区别.那么,通电开机进入系统后,会进入交互界面,等待用户操作,人与计算机交互界面有两种: GUI:图形用户接口.如我们平时使用的Windows  ,linux的X window,有KDE和GOME. CLI:命令行接口,使用的SHELL类型有bash ,csh,tcshell,zshell等. 例如:[[email protected] ~]# commandbin root:当前登录的用户名. dxlcentOS:当前主机的主机名.@是一个分隔

linux入门基础知识及简单命令介绍

linux入门基础知识介绍 1.计算机硬件组成介绍 计算机主要由cpu(运算器.控制器),内存,I/O,外部存储等构成. cpu主要是用来对二进制数据进行运算操作,它从内存中取出数据,然后进行相应的运算操作.不能从硬盘中直接取数据. 内存从外部存储中取出数据供cpu运存.内存的最小单位是字节(byte) 备注:由于32的cpu逻辑寻址能力最大为32内存单元.因此32位cpu可以访问的最大内存空间为:4GB,算法如下: 2^32=2^10*2^10*2^10*2^2 =1024*1024*1024

自定义laravel函数dd()

dd()是laravel中一个帮助调试脚本的函数,可以打印php中所有类型的变量.它让变量显示的方式变得更加优雅,这也正是laravel框架的一大优点.首先看看dd()的源码,本文中laravel框架版本为5.1,(对应文件在laravel框架中的目录路径laravel/vendor/laravel/framework/src/Illuminate/Support/helpers.php) 1 function dd() 2 { 3 array_map(function ($x) { 4 (ne

bash基本知识

bash的颜色显示规则: ascii编码对于颜色进行设置: \033:Ctrl键 [:控制字符和颜色代码之间的间隔字符 0m:关闭颜色属性命令: 1m:加粗显示文本字符: 4m:为文本字符加下划线标识: 5m:使文本字符闪烁: 7m:将文本字符的背景色和前景色交换显示: 8m:将文本字符的背景色和前景色设置为相同颜色: 30m-39m:设置文本字符的前景色:38m和39m暂时保留: 40m-49m:设置文本字符的背景色:48m和49m暂时保留: 例子:echo -e "\033[5;1;31;4

win10下iis部署asp.net core rtm

随着ASP.NET Core 1.0 rtm的发布,网上有许多相关.net core 相关文章,今刚好有时间也在win10环境上搭建下 ASP.NET Core的部署环境,把过程记录下给大家. 1. 开发运行环境 1> Visual Studio 2015 Update 3* 2> .NET Core 1.0 for Visual Studio (包括asp.net core 模板,其中如果机器上没有.net core sdk会默认安装)地址 https://go.microsoft.com/

.Net Core迁移到MSBuild的多平台编译问题

一.前言 本篇主要讨论.NET Core应用程序项目结构的主题,重点探索.NET Core应用程序的多平台编译问题,这里指的多平台是指.NET Framework..NET Core App..NET Standard.Mono.UWP等多平台的条件编译.项目(包)引用.编译符号等问题. .NET Core已经将新的项目管理配置过渡回MSBuild编译系统中.虽然现在可以从无到有的使用VS2017来创建一个新的MSBuild项目,但是还是有好多遗留程序使用着以JSON格式存储的项目配置文件为基础

#8 bash变量中的字符串处理

一个完整的程序,一般包括4类文件: 二进制文件(可执行文件).头和库文件.帮助文件.配置文件: bash--CLI(命令行接口)的一种 bash同样属于完整的应用程序,也有这四类文件: bash的配置文件: 三类: profile类: 为交互式登录的shell进程实现功能初始化的配置文件: bashrc类: 为非交互式登录的shell进程实现功能启动配置的配置文件: logout类: 为交互式登录的shell进程提供终止及清理类功能的配置文件: shell的类型: 交互式登录的shell: 1.

Varnish简介

Varnish介绍: Varnish是一个反向HTTP代理,有时也被称为HTTP的加速器或网络加速器:它存在于真实服务器的前面(可能有多级代理),将来自于客户端的请求中的部分内容存储在自身的内存中,以减少服务器响应时间和网络带宽消耗.与Varnish类似的开源解决方案还有squid. Varnish不仅仅是一个通过缓存数据加速服务的反向代理,根据其安装和配置,也可用来: web application firewall, DDoS attack defender,抵御DDos攻击 hotlink