明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

PHP做Shell語言

[摘要]聯(lián)想軟件超星空工作室 馬洪志PHP(Personal Hypertext Preprocessor) 近一兩年來似乎已經(jīng)成為L(zhǎng)inux/Unix上最廣為使用的網(wǎng)頁處理語言,方便、功能強(qiáng)大與源代碼開放(OpenSource)的特性使得它正逐漸占領(lǐng)傳統(tǒng)的CGI,甚至是 MicroSoft ASP(Ac...
聯(lián)想軟件超星空工作室 馬洪志

PHP(Personal Hypertext Preprocessor) 近一兩年來似乎已經(jīng)成為L(zhǎng)inux/Unix上最廣為使用的網(wǎng)頁處理語言,方便、功能強(qiáng)大與源代碼開放(OpenSource)的特性使得它正逐漸占領(lǐng)傳統(tǒng)的CGI,甚至是 MicroSoft ASP(Active Server Page)的市場(chǎng),很多的web站點(diǎn)用PHP做動(dòng)態(tài)網(wǎng)頁處理。

究其原因,可以總結(jié)如下:

PHP是OpenSource的軟件,基于GPL協(xié)議,源代碼開放,免費(fèi)使用,自由發(fā)放,這樣吸引了大量的人使用,同時(shí)也得到了商業(yè)公司的支持,特別是在PHP4中,zend為PHP提供了引擎和優(yōu)化部分,你可以訪問http://www.php.net或http://www.zend.com,可以得到更多的信息。

PHP本身的語法非常的簡(jiǎn)單,和C、Perl語言有很大的相似。當(dāng)我第一次接觸PHP時(shí),感覺它簡(jiǎn)直是Perl的克隆。PHP本身非常簡(jiǎn)單易懂,同時(shí)提供面向?qū)ο蟮奶幚砟芰Γ屝率肿阋栽谧疃虝r(shí)間內(nèi)學(xué)會(huì)。

PHP 提供了非常豐富的功能,包含了數(shù)學(xué)處理、字串處理、網(wǎng)絡(luò)相關(guān)功能、各種數(shù)據(jù)庫的支持、圖像處理功能。有很多人為PHP發(fā)展提供各式各樣的新功能,它的擴(kuò)性極佳。目前,PHP對(duì)Flash提供了較好的支持。

PHP很容易與Apache相結(jié)合,可以作為Apache的模組來使用,同時(shí),在Apache中設(shè)定安裝相當(dāng)簡(jiǎn)單,也因?yàn)锳pache目前已經(jīng)占據(jù)了Web Server 全球 60% 的市場(chǎng),PHP 自然而然成為 Apache 最佳搭配。同時(shí)為了提高web服務(wù)器的速度,可以把PHP直接編譯進(jìn)Apache,提高web服務(wù)的訪問、處理速度。

PHP的另外的一個(gè)功能是:它實(shí)際上是可以作為shell script來應(yīng)用的。PHP作為shell script比其他的shell語言有很大的優(yōu)勢(shì)。尤其PHP的數(shù)據(jù)庫的服務(wù)功能非常的強(qiáng)大,用戶可以方便的訪問數(shù)據(jù)庫系統(tǒng)。

編譯PHP讓它用來做解釋器,本文的操作環(huán)境是HappyLinux家用版V1.0,以root身份執(zhí)行下面的步驟:


獲得PHP的源代碼  

PHP的源代碼在http://www.php.net 的網(wǎng)站上可以得到,同時(shí)國(guó)內(nèi)的很多的網(wǎng)站上提供改網(wǎng)站的鏡像。目前,最新的版本是PHP 4.0.2。


解開PHP源碼包  

tar zxvf php-4.0.2.tar.gz


編譯PHP  

cd php-4.0.2

configure --with-ftp --with-pgsql

make

注意configure的參數(shù)看PHP的幫助文件,以便你能更好的配置PHP。


當(dāng)編譯完成后,在php-4.0.2目錄下會(huì)生成一個(gè)php的文件,將這個(gè)文件拷貝到/usr/sbin/  

cp ./php /usr/sbin


測(cè)試編譯的結(jié)果  

輸入下面的結(jié)果到文件test.php中:

#!/usr/sbin/php

<?php

echo “Hello World!\n”

?>

保存結(jié)果到test.php中并更改文件的屬性:

chmod 777 ./test.php

執(zhí)行文件test.php

./test.php

這時(shí)你能夠看見結(jié)果:

X-Powered-By: PHP/4.0.2

Content-type: text/html

Hello World!

這個(gè)結(jié)果你可能有些失望,它并不是我們要的全部的結(jié)果。因?yàn),PHP主要是做為網(wǎng)頁的應(yīng)用,上面的頭兩行是輸出的HPPT的頭,怎樣讓PHP去掉這兩行呢?你僅僅需要在加入?yún)?shù)-q就可以去掉HPPT頭:

#!/usr/sbin/php -q

<?php

echo “Hello World!\n”

?>

再看一下輸出的結(jié)果:

Hello World!


OK!搞定。下面用PHP做腳本列舉一些應(yīng)用


用PHP連接數(shù)據(jù)庫  

PHP提供大量的數(shù)據(jù)庫的函數(shù),幾乎所有的數(shù)據(jù)庫PHP提供一套數(shù)據(jù)庫的函數(shù),所以用PHP寫腳本,訪問數(shù)據(jù)庫是一個(gè)很好的主意。下面的例子是用PHP訪問postgresql數(shù)據(jù)庫的一個(gè)例子:

#!/usr/sbin/php -q

<?php

string=$con=pg_Connect("dbname=test port=5432 host=127.0.0.1 user=postgres\ password=postgres");

echo $con."\n";

pg_exec($con,"insert into test1 values ('ok',1,1)");

pg_close($con);

?>

執(zhí)行這個(gè)腳本,PHP訪問數(shù)據(jù)庫test,同時(shí),會(huì)向test1表中插入一個(gè)記錄。有關(guān)PHP訪問數(shù)據(jù)庫的內(nèi)容請(qǐng)看相關(guān)的數(shù)據(jù)庫函數(shù)和數(shù)據(jù)庫的文檔手冊(cè)。


用PHP做FTP自動(dòng)上載和下載腳本  

在PHP3就提供PHP的FTP的函數(shù),用這些函數(shù)能夠?qū)崿F(xiàn)文件的自動(dòng)上載和下載的功能。想要利用PHP提供的FTP函數(shù),必須要在編譯PHP時(shí)的configure指定參--with-ftp。下面是FTP的例子:

#!/usr/sbin/php -q

<?php

// set up basic connection

$conn_id = ftp_connect("$your_ftp_server");


// login with username and password

$login_result = ftp_login($conn_id, "$ftp_your_name", "$ftp_your_password");


// check connection

if ((!$conn_id) (!$login_result)) {

echo "Ftp connection has failed!";

echo "Attempted to connect to $your_ftp_server ";

die;

} else {

echo "Connected to $ftp_server, for your";

}


// upload the file

$upload = ftp_put($conn_id, "$destination_file", "$source_file", FTP_BINARY);


// check upload status

if (!$upload) {

echo "Ftp upload has failed!";

} else {

echo "Uploaded $source_file to $your_ftp_server as $destination_file";

}


// close the FTP stream

ftp_quit($conn_id);

?>

顯然利用PHP可以方便的進(jìn)行網(wǎng)絡(luò)的文件傳輸,沒有必要寫socket程序。


用PHP處理命令行參數(shù)  

PHP和Perl的相似之處還在于它們們處理的參數(shù)的方法是一致的,它們提供變量數(shù)組和變量計(jì)數(shù)器:$ argv [],$ argc。下面的例子是一個(gè)打印命令行字串的例子和命令行求和。

test.php


#!/usr/sbin/php –q  

<?php

echo $argv[1]; //注意$ argv []的第一個(gè)變量從1開始

?>

在命令行下執(zhí)行:./test.php LegendSoftware

將打印LegendSoftware


test1.php


#!/usr/sbin/php –q

<?php

$sum=0;

for ($i=1;$i<=$argc;$i++)

$sum=$sum+$argv[$i];

echo $sum;

?>

執(zhí)行 test1.php 1 2 3 4 5 回車,則會(huì)打印出 15。


在Console下進(jìn)行交互  

許多的C程序員知道在Console下進(jìn)行交互用scanf函數(shù),PHP是為web而設(shè)計(jì)的語言,用戶輸入交互通過form中的變量。那么在Console下怎么進(jìn)行交互呢?答案很簡(jiǎn)單,用fopen函數(shù)打開系統(tǒng)的標(biāo)準(zhǔn)輸入設(shè)備進(jìn)行讀取。下面的程序?qū)崿F(xiàn)了這個(gè)從標(biāo)準(zhǔn)輸入設(shè)備上讀取字串的功能:

#!/usr/sbin/php -q

<?

$fp=fopen("/dev/stdin","r");

echo “Please input a string:”

$inputstr=fgets($fp,100);

fclose($fp);

echo "This string is ";

echo $inputstr.”\n”;

?>  


其中的 fgets($fp,100) 是指從$fp句柄(也就是 "/dev/stdin")中讀取出最多100個(gè)字節(jié),執(zhí)行這個(gè)程序會(huì)等待我們的輸入,當(dāng)我們輸入完按下 enter 之后,程序會(huì)將我們的輸入打印出來。

小結(jié)

通過上面的介紹,和本人的實(shí)踐經(jīng)驗(yàn),PHP的功能非常的強(qiáng)大,不但對(duì)web的處理能力非常的強(qiáng)大,同時(shí)對(duì)腳本的處理能力也是非常的方便。


標(biāo)簽:PHP做Shell語言