导航:首页 > 编程语言 > php调用cgi

php调用cgi

发布时间:2022-12-26 22:02:35

A. php 与 php-cgi问题

建议你暂时放开CGI,实在放不下就看看下面的啰嗦:CGI是一种协议,是WEB服务器调用可执行程序的协议。PHP一般有两种工作模式,一是作为模块,一是作为CGI。因此CGI和PHP就发生了关系。

B. php和cgi是什么关系

cgi只是一个接口而已,你可以用Perl/C/C++/python/Java/PHP/ABC/EFG去写
PHP是一种编程语言,由于Apache有PHP的专用模组,所以可以直接调用,现在比较少人会使用CGI的方式执行PHP(不过好像使用fast-cgi的有一定巿场),大部份的PHP用途是server side script,但实际上你也可以把他写成desktop application,有qt等界面库可以调用(不过真的没多少人开发就是了)
总结:
CGI是一种server side script的执行方式
PHP是一种编程语言!

C. php5-cgi和php5-fpm 这两个东西是什么意思啊有什么区别

什么是PHP-CGI:
PHP-CGI是PHP自带的FastCGI管理器。
启动PHP-CGI,使用如下命令
php-cgi -b 127.0.0.1:9000
PHP-CGI的不足:
1、php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启
2、直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程。)
什么是PHP-FPM
PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下载得到.
PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。
现在我们可以在最新的PHP 5.3.2的源码树里下载得到直接整合了PHP-FPM的分支,据说下个版本会融合进PHP的主分支去。相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。
PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多有点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。
二者的区别:
php-cgi是被调用的进程,php-fpm是配置和管理进程的。

D. linux php-cgi 如何启动

用户可以参考如下php-cgi安装启动过程。
1、解包
tar zxvf php-5.2.6.tar.gz

2、安装
cd php-5.2.6/
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-zlib-dir --with-freetype-dir=/usr --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-gd --enable-ftp --with-iconv --with-gettext --with-curl --enable-fastcgi --with-openssl
make && make install
cd /usr/local/php/lib
cp php.ini-dist php.ini
cp /usr/local/php/bin/php /usr/bin/php-cgi

3、修改php.ini
nano php.ini 按f6然后输入extension_dir
查找/usr/local/php/etc/php.ini中的extension_dir = "./"
修改为extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"

4、启动php-cgi
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -f /usr/bin/php-cgi
nginx配置文件中的 fastcgi_pass 127.0.0.1:9000; 就是根据上面来的

5、查看一下
[zhangy@BlackGhost www]$ ps -e|grep php-cgi
3737 ? 00:00:00 php-cgi
3738 ? 00:00:03 php-cgi
3739 ? 00:00:03 php-cgi
3740 ? 00:00:04 php-cgi
3741 ? 00:00:03 php-cgi
3742 ? 00:00:03 php-cgi

E. php和cgi之间的区别

cgi是一种接口,不管用什么语言都可以按照这个接口进行实现。一般服务器判断需要调用cgi程序前,会把请求的GET参数放在环境变量QUERY_STRING里,POST请求内容则通过标准输入流输送到cgi程序内。cgi程序只需要将HTTP协议(包括HTTP头和HTTP Body)打印到标准输出流stdout,服务器就会把它们直接传输给浏览器。

举个栗子:

//c++实现cgi接口,打印querystring和postdata
#include<iostream>

usingnamespacestd;

intmain(){
cout<<"Content-type:text/html ";
constchar*queryString=getenv("QUERY_STRING");
if(queryString!=NULL){
cout<<"<h1>querystringis:"<<queryString<<"</h1>"<<endl;
}else{
cout<<"<p>Noquerystring</p>"<<endl;
}

stringpostData,tmpData;
while(cin>>tmpData){
postData+=tmpData;
}
if(postData!=""){
cout<<"<div>"<<postData<<"</div>"<<endl;
}else{
cout<<"<p>Nopostdata</p>"<<endl;
}

return0;
}

把它编译好,命名为test.cgi,然后扔到服务器到cgi目录里。然后访问类似于http://localhost/cgi/test.cgi?a=b&c=d的URL,服务器就会把a=b&c=d放到QUERY_STRING环境变量中传给test.cgi。最后能看到页面上显示出query string is a=b&c=d。也可以创建一个表单,把数据POST到http://localhost/cgi/test.cgi,然后可以看到页面上显示出所有的POST data。


php是一种脚本语言,它可以用来做很多事。。。比如说用来写CGI程序:

#!/usr/envphp
<?php
echo"Content-type:text/html ";

$queryString=$_ENV("QUERY_STRING");
if($queryString!=NULL){
echo"<h1>querystringis:$queryString</h1>";
}else{
echo"<p>Noquerystring</p>";
}

$postData=file_get_contents("php://stdin");
if($postData!=""){
echo"<div>$postData</div>";
}else{
echo"<p>Nopostdata</p>";
}
?>

好吧它的功能跟上面C++写的程序一毛一样,我们把它加上“可执行属性”chmod +x testphp.cgi然后扔到cgi目录,然后访问http://localhost/cgi/testphp.cgi?a=b&c=d,以及用表单post数据给它,看到的效果应该是一样的。


所以你也看到了,服务器调用CGI程序,它才不管你用啥实现的,反正接口都定好了,只要按接口来编程就行。


但一般服务器调用PHP和调用CGI程序的逻辑不一样。CGI程序需要自己解析QUERY_STRING和POST_DATA,PHP应该是通过另一套扩展跟服务器交互的,所以一般用PHP直接写网页的时候,写网页的方式跟平时还真不太一样,比如说,服务器的php扩展已经帮我们把query string和post data解析成了数组,我们直接取值就好了:

<?php

if(isset($_GET)){
print_r($_GET);
}else{
echo"<p>Noquerystring</p>";
}

if(isset($_POST)){
print_r($_POST);
}else{
echo"<p>Nopostdata</p>";
}
?>

存成test.php之后访问http://localhost/test.php?a=b&c=d,或者表单提交内容到页面。可以看到输出的数据都是结构化的,已经变成数组了。而且,HTTP头也不需要我们自己输出了(特殊情况除外)。

F. 服务器的php运行是php-cgi模式

检查 PHPINFO 里 确定是ISAPI了吗?

可以设置每个网站运行的帐号 不用默认的IIS_帐号 这样即安全 又可以在任务管理器中跟踪....

G. php和cgi是什么关系

CGI是通用网关协议,是开发动态网页的一个标准,遵循这个标准就可以用BAT、CMD、sh、PERL、C、C++、PERL以及PHP等语言编写程序处理网页请求和返回数据到客户端浏览器。

H. LAMP环境中是如何调用php-cgi.sock这个文件的

lamp环境,说明是apache模块调用php程序的,这个调用的位置,需要修改apache的配置文件。对于版本小于2.2的apache,我们可以直接修改httpd.conf配置文件就行,而对于版本高于2.4的apache我们需要找到模块的配置文件,然后修改对应的配置代码。

具体你可以使用find命令查看哪个文件里面含有5.4的配置文件路径,找到那个文件,然后修改,以后重庆apache服务器应该就可以了。

I. 如何在Php中调用cgi程序

没有办法做很好的揉合。

你可以使用如下类似方式:
SSI揉合

php调用命令行的cgi,使用
如果我的回答没能帮助您,请继续追问。

J. 什么是PHP的CGI模式

你说的fastcgi模式的PHP吧,这个是目前主流的PHP模式,有点是速度更快,更独立。
以前的isapi模式是集合到了iis里面,一旦程序池崩溃,或是PHP崩溃,都会相互影响。
但是fastcgi有个缺点,进程可能会很多。

阅读全文

与php调用cgi相关的资料

热点内容
dvd光盘存储汉子算法 浏览:757
苹果邮件无法连接服务器地址 浏览:962
phpffmpeg转码 浏览:671
长沙好玩的解压项目 浏览:144
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:737
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:484
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:381
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:349
风翼app为什么进不去了 浏览:778
im4java压缩图片 浏览:362
数据查询网站源码 浏览:150
伊克塞尔文档怎么进行加密 浏览:892
app转账是什么 浏览:163