php執行系統外部命令

php執行系統外部命令

提供4種方法:

- exec()、passthru()、system()、 shell_exec()。
    • 在開始介紹前,先檢查下php配置文件php.ini中是有禁止這是個函數。找到 disable_functions,配置以下:
    • disable_functions =
    • 若是"disable_functions="後面有接上面四個函數,將其刪除。
    • 默認php.ini配置文件中是不由止你調用執行外部命令的函數的。

    方法一:exec()

    function exec(string $command,array[optional] $output,int[optional] $return_value)
    • php代碼:
    header("content-type:text/html;charset=gb2312"); 
        // echo exec("ipconfig",$file);
        // echo "</br>";
        // print_r($file);
        $a = exec("ipconfig",$out,$status);  
        print_r($a);  
        echo "<br>-----------------------------------------------------<br>";
        echo "<pre>";
        //print_r($out); 
        var_dump($out);
        echo "</pre>";
        echo "<br>-----------------------------------------------------<br>";
        print_r($status);

    執行結果:php

    Array( [0] => index.php [1] => test.php)
    • 知識點:
      exec 執行系統外部命令時不會輸出結果,而是返回結果的最後一行,若是你想獲得結果你能夠使用第二個參數,讓其輸出到指定的數組,此數組一個記錄表明輸出的一行,即若是輸出結果有20行,則這個數組就有20條記錄,因此若是你須要反覆輸出調用不一樣系統外部命令的結果,你最好在輸出每一條系統外部命令結果時清空這個數組,以防混亂。第三個參數用來取得命令執行的狀態碼,一般執行成功都是返回0。

    方法二:passthru()

    function passthru(string $command,int[optional] $return_value)
    • 代碼:
    <?php
        passthru("ls");
    ?>
    • 執行結果:
    index.phptest.php
    • 知識點:
    • passthru與system的區別,passthru直接將結果輸出到瀏覽器,不須要使用 echo 或 return 來查看結果,不返回任何值,且其能夠輸出二進制,好比圖像數據。

    方法三:system()

    function system(string $command,int[optional] $return_value)
    • 代碼:
    <?php
            system("ls /");
    ?>
    • 執行結果:
    binbootcgroupdevetchomeliblost+foundmediamntoptprocrootsbinselinuxsrvsystmpusrvar
    • 知識點:
    • system和exec的區別在於system在執行系統外部命令時,直接將結果輸出到瀏覽器,不須要使用 echo 或 return 來查看結果,若是執行命令成功則返回true,不然返回false。第二個參數與exec第三個參數含義同樣。

    方法四:反撇號`和shell_exec()

    • shell_exec() 函數實際上僅是反撇號 (`) 操做符的變體

    代碼:html

    <?php
        echo `pwd`;
    ?>
    • 執行結果:
    /var/www/html
    相關文章
    相關標籤/搜索