Perl調(diào)用shell命令的幾大方法小結
第1篇:Perl調(diào)用shell命令的幾大方法小結
perl調(diào)用shell命令的幾大方法小結
一、system
perl也可以用system調(diào)用shell的命令,它和awk的system一樣,返回值也是它調(diào)用的命令的退出狀態(tài).
復制代碼代碼如下:
[root@ax3sp2~]#cataa.pl
#!/usr/bin/perl-w
$file="wt.pl";
system("ls-lwt.pl");
$result=system"ls-l$file";
print"$resultn";#輸出命令的退出狀態(tài)
system"date";
[root@ax3sp2~]#perlaa.pl
-rwxr-xr-x1rootroot12612-1615:12wt.pl
-rwxr-xr-x1rootroot12612-1615:12wt.pl
2023年12月16日星期四15:58:34cst
二、反引號
perl的system函數(shù)和awk的一樣不能夠返回命令的輸出.
要得到命令的輸出,就得使用和shell本身一樣的命令:``
復制代碼代碼如下:
[root@ax3sp2~]#catbb.pl
#!/usr/bin/perl
print`date`;
print"thisistestn";
[root@ax3sp2~]#perlbb.pl
2023年12月16日星期四15:51:59cst
thisistest
三、exec
最后,perl還可以使用exec來調(diào)用shell的命令.exec和system差不多,不同之處在于,調(diào)用exec之后,perl馬上就退出,而不會去繼續(xù)執(zhí)行剩下的代碼
復制代碼代碼如下:
[root@ax3sp2~]#catcc.pl
#!/usr/bin/perl
exec("echothisistest");
print"goodbye!n";#這句話不會被輸出
[root@ax3sp2~]#perlcc.pl
thisistest
第2篇:php調(diào)用shell的方法技巧
一、配置
查看php.ini中配置是否打開安全模式,主要是以下三個地方
safe_mode=(這個如果為off下面兩個就不用管了)
disable_functions=
safe_mode_exec_dir=
二、使用
由于PHP基本是用于WEB程序開發(fā)的,所以安全*成了人們考慮的一個重要方面。于是PHP的設計者們給PHP加了一個門:安全模式。如果運行在安全模式下,那么PHP腳本中將受到如下四個方面的限制:
①執(zhí)行外部命令
②在打開文件時有些限制
③連接MySQL數(shù)據(jù)庫
④基于HTTP的認*
在安全模式下,只有在特定目錄中的外部程序才可以被執(zhí)行,對其它程序的調(diào)用將被拒絕。這個目錄可以在php.ini文件中用safe_mode_exec_dir指令,或在編譯PHP是加上--with-exec-dir選項來指定,默認是/usr/local/php/bin。
如果你調(diào)用一個應該可以輸出結果的外部命令(意思是PHP腳本沒有錯誤),得到的卻是一片空白,那么很可能你的網(wǎng)管已經(jīng)把PHP運行在安全模式下了。
三、如何做?
在PHP中調(diào)用外部命令,可以用如下三種方法來實現(xiàn):
1)用PHP提供的專門函數(shù)
PHP提供共了3個專門的執(zhí)行外部命令的函數(shù):system(),exec(),passthru()。
system()
原型:stringsystem(stringmand[,intreturn_var])
system()函數(shù)很其它語言中的差不多,它執(zhí)行給定的命令,輸出和返回結果。第二個參數(shù)是可選的,用來得到命令執(zhí)行后的狀態(tài)碼。
例子:
復制代碼代碼如下:system("/usr/local/bin/webalizer/webalizer");
exec()
原型:stringexec(stringmand[,stringarray[,intreturn_var]])
exec()函數(shù)與system()類似,也執(zhí)行給定的命令,但不輸出結果,而是返回結果的最后一行。雖然它只返回命令結果的最后一行,但用第二個參數(shù)array可以得到完整的結果,方法是把結果逐行追加到array的結尾處。所以如果array不是空的,在調(diào)用之前最好用unset()最它清掉。只有指定了第二個參數(shù)時,才可以用第三個參數(shù),用來取得命令執(zhí)行的狀態(tài)碼。
例子:
復制代碼代碼如下:exec("/bin/ls-l");
exec("/bin/ls-l",$res);
#$res是一個數(shù)據(jù),每個元素代表結果的一行
exec("/bin/ls-l",$res,$rc);
#$rc的值是命令/bin/ls-l的狀態(tài)碼。成功的情況下通常是0
passthru()
原型:voidpassthru(stringmand[,intreturn_var])
passthru()只調(diào)用命令,不返回任何結果,但把命令的運行結果原樣地直接輸出到標準輸出設備上。所以passthru()函數(shù)經(jīng)常用來調(diào)用象pbmplus(Unix下的一個處理圖片的工具,輸出二進制的原始圖片的流)這樣的程序。同樣它也可以得到命令執(zhí)行的狀態(tài)碼。
例子:
復制代碼代碼如下:header("Content-type:image/gif");
passthru("./ppmtogifhunte.ppm");
希望本文所述對大家的PHP程序設計有所幫助。
第3篇:php調(diào)用外部shell的方法總結
當php程序運行在安全模式下時,php腳本受到如下四個方面的限制,就跟隨小編去了解下吧,想了解更多相關信息請持續(xù)關注我們應屆畢業(yè)生考試網(wǎng)!
1)、執(zhí)行外部命令
2)、在打開文件時有些限制
3)、連接MySQL數(shù)據(jù)庫
4)、基于HTTP的認*
在安全模式下,只有在特定目錄中的外部程序才可以被執(zhí)行,對其它程序的調(diào)用將被拒絕。
該目錄可以在php.ini文件中用safe_mode_exec_dir指令,或在編譯PHP是加上--with-exec-dir選項來指定,默認是/usr/local/php/bin。
如果調(diào)用一個應該可以輸出結果的外部命令(意思是PHP腳本無錯),得到的卻是一片空白,那么很可能PHP是運行在安全模式下的。
遇到這種情況,如何處理呢?
在PHP中調(diào)用外部命令,可以用如下三種方法來實現(xiàn):
PHP提供的專門函數(shù)
PHP提供共了3個專門的執(zhí)行外部命令的函數(shù):system(),exec(),passthru()。
system()
原型:stringsystem(stringmand[,intreturn_var])
system()函數(shù)很其它語言中的差不多,它執(zhí)行給定的命令,輸出和返回結果。第二個參數(shù)是可選的,用來得到命令執(zhí)行后的狀態(tài)碼。
例子:
復制代碼代碼如下:
<?php
system("/usr/local/bin/webalizer/webalizer");
?>
exec()
原型:stringexec(stringmand[,stringarray[,intreturn_var]])
exec()函數(shù)與system()類似,也執(zhí)行給定的命令,但不輸出結果,而是返回結果的最后一行。雖然它只返回命令結果的最后一行,但用第二個參數(shù)array可以得到完整的結果,方法是把結果逐行追加到array的結尾處。所以如果array不是空的,在調(diào)用之前最好用unset()最它清掉。只有指定了第二個參數(shù)時,才可以用第三個參數(shù),用來取得命令執(zhí)行的狀態(tài)碼。
例子:
復制代碼代碼如下:
<?php
exec("/bin/ls-l");
exec("/bin/ls-l",$res);
#$res是一個數(shù)據(jù),每個元素代表結果的一行
exec("/bin/ls-l",$res,$rc);
#$rc的值是命令/bin/ls-l的狀態(tài)碼。成功的情況下通常是0
?>
passthru()
原型:voidpassthru(stringmand[,intreturn_var])
passthru()只調(diào)用命令,不返回任何結果,但把命令的運行結果原樣地直接輸出到標準輸出設備上。所以passthru()函數(shù)經(jīng)常用來調(diào)用象pbmplus(Unix下的一個處理圖片的工具,輸出二進制的原始圖片的流)這樣的程序。同樣它也可以得到命令執(zhí)行的狀態(tài)碼。
例子:
復制代碼代碼如下:
<?php
header("Content-type:image/gif");
passthru("./ppmtogifhunte.ppm");
?>
版權聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 yyfangchan@163.com (舉報時請帶上具體的網(wǎng)址) 舉報,一經(jīng)查實,本站將立刻刪除