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有個缺點,進程可能會很多。