PHP不一定要以http方式调用。PHP与其它应用的接口叫做SAPI,选用不同的SAPI决定了调用PHP的方式。例如Apache的mod_php就是一个SAPI的实现,用于Apache与PHP交互,同样,CGI和FastCGI(如fpm)的SAPI实现也是用于以HTTP方式调用PHP解释器。除此之外,还有很多SAPI,如CLI的SAPI可以支持命令行方式运行PHP脚本,运用php的pcntl_fork函数可以用与C类似的方式(两次fork)创建deamon进程,这样PHP脚本就可以当做服务使用了。至于服务与其它进程的交互,php支持socket。我写过一个小的Demo,展示了如何用PHP写Server,你可以看一下:

//Accpet the http client request and generate response content.

//As a demo, this function just send "PHP HTTP Server" to client.

function handle_http_request($address, $port)

{

$max_backlog = 16;

$res_content = "HTTP/1.1 200 OK\nContent-Length: 15\nContent-Type: text/plain; charset=UTF-8\n\nPHP HTTP Server

";

$res_len = strlen($res_content);

//Create, bind and listen to socket: 127.0.0.1:8888

if(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === FALSE)

{

echo "Create socket failed!\n";

exit;

}

if((socket_bind($socket, $address, $port)) === FALSE)

{

echo "Bind socket failed!\n";

exit;

}

if((socket_listen($socket, $max_backlog)) === FALSE)

{

echo "Listen to socket failed!\n";

exit;

}

//Loop

while(TRUE)

{

if(($accept_socket = socket_accept($socket)) === FALSE)

{

continue;

}

else

{

socket_write($accept_socket, $res_content, $res_len);

socket_close($accept_socket);

}

}

}

//Run as deamon process.

function run()

{

if(($pid1 = pcntl_fork()) === 0)

//First child process

{

posix_setsid(); //Set first child process as the session leader.

if(($pid2 = pcntl_fork()) === 0)

//Second child process, which run as deamon.

{

handle_http_request('www.codinglabs.org', 9999); //Replaced by your own domain or address.

}

else

{

//Second child process exit;

exit;

}

}

else

{

//First child process exit;

pcntl_wait($status);

}

}

//Entry point.

run();

sapi/cgi/php-cgi,sapi/cgi/php-cgi相关推荐

  1. C/S和B/S模式的主要特点以及区别在那里?画出CGI工作原理图,具体描述CGI的主要流程和实现步骤。

    C/S和B/S模式的主要特点以及区别在那里? CS即Client/Server(客户机/服务器)结构. C/S结构在技术上很成熟,它的主要特点是交互性强.具有安全的存取模式.网络通信量低.响应速度快. ...

  2. boa 调用 cgi 读取文件_PHP7的内核CGI与FastCGI,你懂多少?

    CGI:是 Web Server 与 Web Application 之间数据交换的一种协议. FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化. PHP-CGI:是 P ...

  3. c 语言cgi编程,几种语言的CGI编程

    为了了解PHP.JSP.ASP出现之前人们写网站的方法,洒家研究了一波CGI,使用C.Python.batch.shell script语言写了几个简单的网页. CGI即通用网关接口,指web服务器调 ...

  4. CGI简介用C来写CGI程序简要指南

    1. 什么是CGI? CGI 是通用网关接口(Common Gateway Interface)的缩写. 它主要用于服务器端动态输出客户端的请求(如,HTML页面/二进制文件). 也就是说客户端请求参 ...

  5. 关于apache上的CGI文件问题总结--为什么无法找到cgi文件、为什么找到了cgi文件却不执行反而询问是否下载或直接显示文件代码

    最近我在研究web.cgi,比较好奇cgi这玩意,就在Ubuntu上下载安装了Apache(2.2版本),并写个简单的html文件 test.html 和相关的cgi文件 t.cgi. Apache的 ...

  6. CGI简介——用C来写CGI程序简要指南

    http://www.cnblogs.com/ribavnu/archive/2012/11/18/2775552.html 1. 什么是CGI ? CGI 是通用网关接口(Common Gatewa ...

  7. linux shell cgi post,linux下shell处理cgi的方法--post get

    web server获取网页上HTML的DOM对象信息发送来的信息,主要有get和post方法. 介绍原理的文章很多,但介绍实际应用到linux的shell中的文章很少. 1.get方法 ①表单源码如 ...

  8. cgi怎么返回数据给html,cgi创建web应用(一)之传递表单数据与返回html

    主旨: 0.环境说明 1.创建一个cgi本地服务 2.创建一个html表单页 3.创建一个对应的cgi 脚本文件 4.运行调试 0.环境说明: 系统:win7 32位家庭版 python:2.7 代码 ...

  9. php sapi全拼,php sapi

    php的SAPI,CLI SAPI,CGI SAPI 首先一个问题:在命令行下执行:php -r 'echo 12;' 控制台会打印出 12: 这个过程不是很奇妙么,我输入的是shell命令,但是执行 ...

  10. php sapi全拼,php sapi type

    PHP不一定要以http方式调用.PHP与其它应用的接口叫做SAPI,选用不同的SAPI决定了调用PHP的方式.例如Apache的mod_php就是一个SAPI的实现,用于Apache与PHP交互,同 ...

最新文章

  1. 讨论UML概念和模型UML九种图。
  2. 提高方面级情感分析的性能:一种结合词汇图和句法图的方法
  3. react部署在node_如何在没有命令行的情况下在3分钟内将React + Node应用程序部署到Heroku
  4. beeline连接hiveserver2报错:User: root is not allowed to impersonate root
  5. 流量隔离方案 Dpath 护航双十一新零售
  6. 树--树的基本性质(JAVA)
  7. chararray遍历_数组常用的遍历方法 ——总结
  8. Spring框架配置文件 application.xml 示例
  9. html设置隐藏窗口,html – 在窗口大小调整时逐个隐藏菜单项
  10. Oracle 11g SQL基础入门系列培训-小布作品
  11. sai钢笔图层怎么移动某条线?
  12. mipad1小米平板1刷LOS神盾系统16睡死问题排查(一)
  13. 我们终究是一群平凡的人
  14. 机器学习(Machine Learning and Data Mining)CS 5751——final复习记录(3)
  15. Shell脚本速查手册
  16. 关于BHO不能够正常运行的问题!
  17. 【研究计划书】基于人工智能算法的肿瘤代谢问题研究
  18. 2022年航空与物流行业研究报告
  19. Android 开发工具集合
  20. 有关剑侠情缘网络版开发的一篇文章

热门文章

  1. STM32--ADC
  2. 微信推出“微信圈子”,玩起来原来这么爽?
  3. SQL CAST与CONVERT区别
  4. 中国皇帝顺序(全)---
  5. excel表格打印每页都有表头_【Excel】打印超长表格,怎么才能每页都显示表头?...
  6. Invalid byte tag in constant pool 19
  7. 计算机管理要继续请输入,Windows 10上提示UAC错误:如要继续请输入管理员密码!...
  8. 情人节浪漫3D照片墙【附源码】
  9. 03 HTML_网页中的表格
  10. phoenxi elixir 框架几个方便的命令