php提供4種方法執(zhí)行系統(tǒng)外部命令:exec()本昏、passthru()供汛、system()、 shell_exec()。
在開始介紹前怔昨,先檢查下php配置文件php.ini中是有禁止這是個(gè)函數(shù)雀久。找到 disable_functions,配置如下:
disable_functions =
如果“disable_functions=”后面有接上面四個(gè)函數(shù)趁舀,將其刪除赖捌。
默認(rèn)php.ini配置文件中是不禁止你調(diào)用執(zhí)行外部命令的函數(shù)的。
方法一:exec()
function exec(string $command,array[optional] $output,int[optional] $return_value)
php代碼:
<?php
echoexec("ls",$file);
echo"</br>";
print_r($file);
?>
執(zhí)行結(jié)果:
test.php
Array( [0] => index.php [1] => test.php)
知識(shí)點(diǎn):
exec 執(zhí)行系統(tǒng)外部命令時(shí)不會(huì)輸出結(jié)果矮烹,而是返回結(jié)果的最后一行越庇,如果你想得到結(jié)果你可以使用第二個(gè)參數(shù),讓其輸出到指定的數(shù)組奉狈,此數(shù)組一個(gè)記錄代表輸出的一行卤唉,即如果輸出結(jié)果有20行,則這個(gè)數(shù)組就有20條記錄仁期,所以如果你需要反復(fù)輸出調(diào)用不同系統(tǒng)外部命令的結(jié)果桑驱,你最好在輸出每一條系統(tǒng)外部命令結(jié)果時(shí)清空這個(gè)數(shù)組,以防混亂跛蛋。第三個(gè)參數(shù)用來取得命令執(zhí)行的狀態(tài)碼熬的,通常執(zhí)行成功都是返回0。
方法二:passthru()
function passthru(string $command,int[optional] $return_value)
代碼:
<?php
passthru("ls");
?>
執(zhí)行結(jié)果:
index.phptest.php
知識(shí)點(diǎn):
passthru與system的區(qū)別问芬,passthru直接將結(jié)果輸出到瀏覽器悦析,不需要使用 echo 或 return 來查看結(jié)果,不返回任何值此衅,且其可以輸出二進(jìn)制强戴,比如圖像數(shù)據(jù)。
方法三:system()
function system(string $command,int[optional] $return_value)
代碼:
<?php
system("ls /");
?>
執(zhí)行結(jié)果:
binbootcgroupdevetchomeliblost+foundmediamntoptprocrootsbinselinuxsrvsystmpusrvar
知識(shí)點(diǎn):
system和exec的區(qū)別在于system在執(zhí)行系統(tǒng)外部命令時(shí)挡鞍,直接將結(jié)果輸出到瀏覽器骑歹,不需要使用 echo 或 return 來查看結(jié)果,如果執(zhí)行命令成功則返回true墨微,否則返回false道媚。第二個(gè)參數(shù)與exec第三個(gè)參數(shù)含義一樣。
方法四:反撇號(hào)`和shell_exec()
shell_exec() 函數(shù)實(shí)際上僅是反撇號(hào) (`) 操作符的變體
代碼
<?php
echo`pwd`;
?>
執(zhí)行結(jié)果:
/var/www/html