最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP執(zhí)行外部命令的函數(shù):exec(), system(), passthru(), shell_exec()

 更新時(shí)間:2023年05月20日 16:44:39   投稿:yin  
system()輸出并返回最后一行shell結(jié)果。exec()不輸出結(jié)果,返回最后一行shell結(jié)果,所有結(jié)果可以保存到一個(gè)返回的數(shù)組里面。passthru()只調(diào)用命令,把命令的運(yùn)行結(jié)果原樣地直接輸出到標(biāo)準(zhǔn)輸出設(shè)備上...

用PHP提供的專門執(zhí)行外部命令的函數(shù)(四個(gè)):

PHP提供4個(gè)專門的執(zhí)行外部命令的函數(shù):exec(), system(), passthru(), shell_exec()

1)exec()

原型: string exec ( string $command [, array &$output [, int &$return_var ]] )

說明: 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ù)組unset($output),以防混亂。第三個(gè)參數(shù)用來取得命令執(zhí)行的狀態(tài)碼,通常執(zhí)行成功都是返回0。

<?php
????exec("dir",$output);
????print_r($output);
?>

2)system()

原型: string system ( string $command [, int &$return_var ] )

說明: system和exec的區(qū)別在于,system在執(zhí)行系統(tǒng)外部命令時(shí),直接將結(jié)果輸出到游覽器,如果執(zhí)行命令成功則返回true,否則返回false。第二個(gè)參數(shù)與exec第三個(gè)參數(shù)含義一樣。

<?php
system("pwd");
?>

3)passthru()

原型: void passthru ( string $command [, int &$return_var ] )

說明: passthru與system的區(qū)別,passthru直接將結(jié)果輸出到游覽器,不返回任何值,且其可以輸出二進(jìn)制,比如圖像數(shù)據(jù)。第二個(gè)參數(shù)可選,是狀態(tài)碼。

<?php
header("Content-type:image/gif");
passthru("/usr/bin/ppm2tiff? /usr/share/tk8.4/demos/images/teapot.ppm");
?>

4)shell_exec()

原型: string shell_exec ( string $cmd )

說明: 直接執(zhí)行命令$cmd

<?php
$output?= shell_exec('ls -lart');
echo?"<pre>$output</pre>";
?>

反撇號(hào)

原型: 反撇號(hào)`(和~在同一個(gè)鍵)執(zhí)行系統(tǒng)外部命令

說明: 在使用這種方法執(zhí)行系統(tǒng)外部命令時(shí),要確保shell_exec函數(shù)可用,否則是無法使用這種反撇號(hào)執(zhí)行系統(tǒng)外部命令的。

<?php
????echo?`dir`;
?>

用popen()函數(shù)打開進(jìn)程 

原型: resource popen ( string $command , string $mode )

說明: 能夠和命令進(jìn)行交互。之前介紹的方法只能簡(jiǎn)單地執(zhí)行命令,卻不能與命令交互。有時(shí)須向命令輸入一些東西,如在增加系統(tǒng)用戶時(shí),要調(diào)用su來把當(dāng)前用戶換到root用戶,而su命令必須要在命令行上輸入root的密碼。這種情況下,用之前提到的方法顯然是不行的。

popen( )函數(shù)打開一個(gè)進(jìn)程管道來執(zhí)行給定的命令,返回一個(gè)文件句柄,可以對(duì)它讀和寫。返回值和fopen()函數(shù)一樣,返回一個(gè)文件指針。除非使用的是單一的模式打開(讀or寫),否則必須使用pclose()函數(shù)關(guān)閉。該指針可以被fgets(),fgetss(),fwrite()調(diào)用。出錯(cuò)時(shí),返回FALSE。

<?php
error_reporting(E_ALL);
/* Add redirection so we can get stderr. */
$handle?= popen('/path/to/executable 2>&1', 'r');
echo?"'$handle'; "?. gettype($handle) . "\n";
$read?= fread($handle, 2096);
echo?$read;
pclose($handle);
?>

要考慮兩個(gè)問題:安全性和超時(shí)

1)安全性

由于PHP基本是用于WEB程序開發(fā)的,所以安全性成了人們考慮的一個(gè)重要方面 。于是PHP的設(shè)計(jì)者們給PHP加了一個(gè)門:安全模式。如果運(yùn)行在安全模式下,那么PHP腳本中將受 到如下四個(gè)方面的限制:

執(zhí)行外部命令

在打開文件時(shí)有些限制

連接MySQL數(shù)據(jù)庫

基于HTTP的認(rèn)證

在安全模式下,只有在特定目錄中的外部程序才可以被執(zhí)行,對(duì)其它程序的調(diào)用將被拒絕。這個(gè)目錄可以在PhP.ini 文件中用safe_mode_exec_dir指令,或在編譯PHP是加上--with-exec-dir選項(xiàng)來指定。

 當(dāng)你使用這些函數(shù)來執(zhí)行系統(tǒng)命令時(shí),可以使用escapeshellcmd()和escapeshellarg()函數(shù)阻止用戶惡意在系統(tǒng)上執(zhí)行命令,escapeshellcmd()針對(duì)的是執(zhí)行的系統(tǒng)命令,而escapeshellarg()針對(duì)的是執(zhí)行系統(tǒng)命令的參數(shù)。這兩個(gè)參數(shù)有點(diǎn)類似addslashes()的功能。

2)超時(shí)

    當(dāng)執(zhí)行命令的返回結(jié)果非常龐大時(shí),可以需要考慮將返回結(jié)果輸出至其他文件,再另行讀取文件,這樣可以顯著提高程序執(zhí)行的效率。

如果要執(zhí)行的命令要花費(fèi)很長(zhǎng)的時(shí)間,那么應(yīng)該把這個(gè)命令放到系統(tǒng)的后臺(tái)去運(yùn)行。但在默認(rèn)情況下,象system()等函數(shù)要等到這個(gè)命令運(yùn)行完才返回(實(shí)際上是在等命令的輸出結(jié)果),這肯定會(huì)引起PHP腳本的超時(shí)。解決的辦法是把命令的輸出重定向到另外一個(gè)文件或流中,如:

<?php
system("/usr/local/bin/order_proc? >? /tmp/abc ");
?>

但我調(diào)用的DOS命令需要幾分鐘的時(shí)間,而且為了批處理不能簡(jiǎn)單的把結(jié)果寫入文件了事,要順序執(zhí)行以下的程序

PHP設(shè)置了調(diào)用系統(tǒng)命令的時(shí)間限制,如果調(diào)用命令超時(shí),雖然這個(gè)命令還是會(huì)被執(zhí)行完,但PHP沒有得到返回值,被終止了(最可恨的是,不顯示任何錯(cuò)誤)

修改php.ini并重啟Apache以允許系統(tǒng)命令運(yùn)行更長(zhǎng)的時(shí)間

max_execution_time = 600

到此這篇關(guān)于PHP執(zhí)行外部命令的函數(shù):exec(), system(), passthru(), shell_exec()的文章就介紹到這了,更多相關(guān)exec(), system(), passthru(), shell_exec()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • php讀取mysql中文數(shù)據(jù)出現(xiàn)亂碼的解決方法

    php讀取mysql中文數(shù)據(jù)出現(xiàn)亂碼的解決方法

    以下是對(duì)php讀取mysql中文數(shù)據(jù)出現(xiàn)亂碼問題的解決方法進(jìn)行了介紹,需要的朋友可以過來參考下
    2013-08-08
  • PHP實(shí)現(xiàn)支持GET,POST,Multipart/form-data的HTTP請(qǐng)求類

    PHP實(shí)現(xiàn)支持GET,POST,Multipart/form-data的HTTP請(qǐng)求類

    這篇文章主要介紹了PHP實(shí)現(xiàn)支持GET,POST,Multipart/form-data的HTTP請(qǐng)求類,包括了連接與處理方式及相關(guān)的技巧,需要的朋友可以參考下
    2014-09-09
  • php的閉包(Closure)匿名函數(shù)詳解

    php的閉包(Closure)匿名函數(shù)詳解

    本文主要給大家介紹的是php5.3引入的PHP匿名函數(shù),也就是閉包(Closure),以及閉包的作用,非常詳細(xì),這里推薦給有需要的小伙伴們。
    2015-02-02
  • 探討php中header的用法詳解

    探討php中header的用法詳解

    本篇文章是對(duì)php中header的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP編輯器PhpStrom運(yùn)行緩慢問題

    PHP編輯器PhpStrom運(yùn)行緩慢問題

    本文主要介紹了解決PHP編輯器PhpStrom運(yùn)行緩慢問題的方法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • PHP提取中文首字母

    PHP提取中文首字母

    從別人程序中扒拉出來的提取中文首字母的php代碼不是原創(chuàng)。Dzender的代碼學(xué)習(xí)用
    2008-04-04
  • 介紹一些PHP判斷變量的函數(shù)

    介紹一些PHP判斷變量的函數(shù)

    與其他語言不同,PHP不是一種嚴(yán)格的類型語言?;旧?,這意味著開發(fā)者在使用一個(gè)變量前,不必明確地設(shè)定這個(gè)變量的類型(數(shù)字、字符串、布爾值)。相反,PHP解釋程序根據(jù)存儲(chǔ)在變量中的信息自動(dòng)探測(cè)變量的類型
    2012-04-04
  • mysql數(shù)據(jù)庫差異比較的PHP代碼

    mysql數(shù)據(jù)庫差異比較的PHP代碼

    這天遇見個(gè)需求:由于升級(jí)系統(tǒng) 這些系統(tǒng)從A庫升級(jí)到B庫,但是不知道數(shù)據(jù)庫添加了哪些字段和增加了哪些表
    2012-02-02
  • PHP中文件緩存轉(zhuǎn)內(nèi)存緩存的方法

    PHP中文件緩存轉(zhuǎn)內(nèi)存緩存的方法

    顧名思義文件緩存轉(zhuǎn)內(nèi)存緩存就是將存儲(chǔ)在文件中的數(shù)據(jù)轉(zhuǎn)到內(nèi)存中去,實(shí)現(xiàn)磁盤操作轉(zhuǎn)為內(nèi)存操作,這樣可以大大提高數(shù)據(jù)訪問速度,并能實(shí)現(xiàn)緩存數(shù)據(jù)的分布式部署。文件緩存與內(nèi)存緩存的介紹請(qǐng)參考名詞解釋部分
    2011-12-12

最新評(píng)論

聂荣县| 东光县| 平凉市| 临沭县| 麦盖提县| 元氏县| 阜平县| 新野县| 资溪县| 沙田区| 浦北县| 府谷县| 新竹市| 岳西县| 延津县| 丹巴县| 云和县| 巴林右旗| 集贤县| 沙田区| 江阴市| 伽师县| 白玉县| 大埔区| 济源市| 洛浦县| 城步| 金堂县| 洪雅县| 阿瓦提县| 芮城县| 沾益县| 南充市| 雅江县| 景德镇市| 鹤峰县| 镇赉县| 云龙县| 马边| 封丘县| 南昌县|