PHP做Shell語言
發(fā)表時間:2024-05-14 來源:明輝站整理相關軟件相關文章人氣:
[摘要]聯想軟件超星空工作室 馬洪志PHP(Personal Hypertext Preprocessor) 近一兩年來似乎已經成為Linux/Unix上最廣為使用的網頁處理語言,方便、功能強大與源代碼開放(OpenSource)的特性使得它正逐漸占領傳統(tǒng)的CGI,甚至是 MicroSoft ASP(Ac...
聯想軟件超星空工作室 馬洪志
PHP(Personal Hypertext Preprocessor) 近一兩年來似乎已經成為Linux/Unix上最廣為使用的網頁處理語言,方便、功能強大與源代碼開放(OpenSource)的特性使得它正逐漸占領傳統(tǒng)的CGI,甚至是 MicroSoft ASP(Active Server Page)的市場,很多的web站點用PHP做動態(tài)網頁處理。
究其原因,可以總結如下:
PHP是OpenSource的軟件,基于GPL協(xié)議,源代碼開放,免費使用,自由發(fā)放,這樣吸引了大量的人使用,同時也得到了商業(yè)公司的支持,特別是在PHP4中,zend為PHP提供了引擎和優(yōu)化部分,你可以訪問http://www.php.net或http://www.zend.com,可以得到更多的信息。
PHP本身的語法非常的簡單,和C、Perl語言有很大的相似。當我第一次接觸PHP時,感覺它簡直是Perl的克隆。PHP本身非常簡單易懂,同時提供面向對象的處理能力,讓新手足以在最短時間內學會。
PHP 提供了非常豐富的功能,包含了數學處理、字串處理、網絡相關功能、各種數據庫的支持、圖像處理功能。有很多人為PHP發(fā)展提供各式各樣的新功能,它的擴性極佳。目前,PHP對Flash提供了較好的支持。
PHP很容易與Apache相結合,可以作為Apache的模組來使用,同時,在Apache中設定安裝相當簡單,也因為Apache目前已經占據了Web Server 全球 60% 的市場,PHP 自然而然成為 Apache 最佳搭配。同時為了提高web服務器的速度,可以把PHP直接編譯進Apache,提高web服務的訪問、處理速度。
PHP的另外的一個功能是:它實際上是可以作為shell script來應用的。PHP作為shell script比其他的shell語言有很大的優(yōu)勢。尤其PHP的數據庫的服務功能非常的強大,用戶可以方便的訪問數據庫系統(tǒng)。
編譯PHP讓它用來做解釋器,本文的操作環(huán)境是HappyLinux家用版V1.0,以root身份執(zhí)行下面的步驟:
獲得PHP的源代碼
PHP的源代碼在http://www.php.net 的網站上可以得到,同時國內的很多的網站上提供改網站的鏡像。目前,最新的版本是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的參數看PHP的幫助文件,以便你能更好的配置PHP。
當編譯完成后,在php-4.0.2目錄下會生成一個php的文件,將這個文件拷貝到/usr/sbin/
cp ./php /usr/sbin
測試編譯的結果
輸入下面的結果到文件test.php中:
#!/usr/sbin/php
<?php
echo “Hello World!\n”
?>
保存結果到test.php中并更改文件的屬性:
chmod 777 ./test.php
執(zhí)行文件test.php
./test.php
這時你能夠看見結果:
X-Powered-By: PHP/4.0.2
Content-type: text/html
Hello World!
這個結果你可能有些失望,它并不是我們要的全部的結果。因為,PHP主要是做為網頁的應用,上面的頭兩行是輸出的HPPT的頭,怎樣讓PHP去掉這兩行呢?你僅僅需要在加入參數-q就可以去掉HPPT頭:
#!/usr/sbin/php -q
<?php
echo “Hello World!\n”
?>
再看一下輸出的結果:
Hello World!
OK!搞定。下面用PHP做腳本列舉一些應用
用PHP連接數據庫
PHP提供大量的數據庫的函數,幾乎所有的數據庫PHP提供一套數據庫的函數,所以用PHP寫腳本,訪問數據庫是一個很好的主意。下面的例子是用PHP訪問postgresql數據庫的一個例子:
#!/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í)行這個腳本,PHP訪問數據庫test,同時,會向test1表中插入一個記錄。有關PHP訪問數據庫的內容請看相關的數據庫函數和數據庫的文檔手冊。
用PHP做FTP自動上載和下載腳本
在PHP3就提供PHP的FTP的函數,用這些函數能夠實現文件的自動上載和下載的功能。想要利用PHP提供的FTP函數,必須要在編譯PHP時的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可以方便的進行網絡的文件傳輸,沒有必要寫socket程序。
用PHP處理命令行參數
PHP和Perl的相似之處還在于它們們處理的參數的方法是一致的,它們提供變量數組和變量計數器:$ argv [],$ argc。下面的例子是一個打印命令行字串的例子和命令行求和。
test.php
#!/usr/sbin/php –q
<?php
echo $argv[1]; //注意$ argv []的第一個變量從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 回車,則會打印出 15。
在Console下進行交互
許多的C程序員知道在Console下進行交互用scanf函數,PHP是為web而設計的語言,用戶輸入交互通過form中的變量。那么在Console下怎么進行交互呢?答案很簡單,用fopen函數打開系統(tǒng)的標準輸入設備進行讀取。下面的程序實現了這個從標準輸入設備上讀取字串的功能:
#!/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個字節(jié),執(zhí)行這個程序會等待我們的輸入,當我們輸入完按下 enter 之后,程序會將我們的輸入打印出來。
小結
通過上面的介紹,和本人的實踐經驗,PHP的功能非常的強大,不但對web的處理能力非常的強大,同時對腳本的處理能力也是非常的方便。