導航:首頁 > 程序命令 > php怎麼執行Linux命令

php怎麼執行Linux命令

發布時間:2023-07-05 18:20:30

php執行linux命令並輸出終端屏幕顯示的內容(實時)

PHP在linux上執行命令

目錄:
一、PHP中調用外部命令介紹
二、關於安全問題
三、關於超時問題
四、關於PHP運行linux環境中命令出現的問題

一、PHP中調用外部命令介紹
在PHP中調用外部命令,可以用,1>調用專門函數、2>反引號、3>popen()函數打開進程,三種方法來實現:

方法一:用PHP提供的專門函數(四個):
PHP提供4個專門的執行外部命令的函數:exec(), system(), passthru(), shell_exec()
1)exec()
原型: string exec ( string $command [, array &$output [, int &$return_var ] )
說明: exec執行系統外部命令時不會輸出結果,而是返回結果的最後一行。如果想得到結果,可以使用第二個參數,讓其輸出到指定的數組。此數組一個記錄代表輸出的一行。即如果輸出結果有20行,則這個數組就有20條記錄,所以如果需要反復輸出調用不同系統外部命令的結果,最好在輸出每一條系統外部命令結果時清空這個數組unset($output),以防混亂。第三個參數用來取得命令執行的狀態碼,通常執行成功都是返回0。
<?php
exec("dir",$output);
print_r($output);
?>

2)system()
原型: string system ( string $command [, int &$return_var ] )
說明: system和exec的區別在於,system在執行系統外部命令時,它執行給定的命令,輸出和返回結果。第二個參數是可選的,用來得到命令執行後的狀態碼。
<?php
system("pwd",$result);
print $result;//輸出命令的結果狀態碼
?>
關於第二個參數結果狀態碼的簡單介紹:
如果返回0是運行成功,
在Bash中,當錯誤發生在致命信號時,bash會返回128+signal number做為返回值。
如果找不到命令,將會返回127。
如果命令找到了,但該命令是不可執行的,將返回126。
除此以外,Bash本身會返回最後一個指令的返回值。
若是執行中發生錯誤,將會返回一個非零的值。
Fatal Signal : 128 + signo
Can't not find command : 127
Can't not execute : 126
Shell script successfully executed : return the last command exit status
Fatal ring execution : return non-zero

3)passthru()
原型: void passthru ( string $command [, int &$return_var ] )
說明: passthru與system的區別,passthru直接將結果輸出到游覽器,不返回任何值,且其可以輸出二進制,比如圖像數據。第二個參數可選,是狀態碼。
<?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 )
說明: 直接執行命令$cmd
<?php
$output = shell_exec('ls -lart');
echo "<pre>$output</pre>";
?>

方法二:反撇號
原型: 反撇號`(和~在同一個鍵)執行系統外部命令
說明: 在使用這種方法執行系統外部命令時,要確保shell_exec函數可用,否則是無法使用這種反撇號執行系統外部命令的。
<?php
echo `dir`;
?>

方法三:用popen()函數打開進程
原型: resource popen ( string $command , string $mode )
說明: 能夠和命令進行交互。之前介紹的方法只能簡單地執行命令,卻不能與命令交互。有時須向命令輸入一些東西,如在增加系統用戶時,要調用su來把當前用戶換到root用戶,而su命令必須要在命令行上輸入root的密碼。這種情況下,用之前提到的方法顯然是不行的。
popen( )函數打開一個進程管道來執行給定的命令,返回一個文件句柄,可以對它讀和寫。返回值和fopen()函數一樣,返回一個文件指針。除非使用的是單一的模式打開(讀or寫),否則必須使用pclose()函數關閉。該指針可以被fgets(),fgetss(),fwrite()調用。出錯時,返回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);
?>

㈡ PHP執行linux系統命令

首先先要給大家介紹PHP執行linux系統命令的幾個基本函數 我曾經很長一段時間都分不清下面幾個函數的具體用法區別 system函數 說明 執行外部程序並顯示輸出資料 語法 string system(string mand int [return_var]); 返回值: 字元串 詳細介紹 本函數就像是 C 語中的函數 system() 用來執行指令 並輸出結果 若是 return_var 參數存在 則執行 mand 之後的狀態會填入 return_var 中 同樣值得注意的是若需要處理用戶輸入的資料 而又要防止用戶耍花招破解系統 則可以使用 EscapeShellCmd() 若 PHP 以模塊式的執行 本函數會在每一行輸出後自動更新 Web 伺服器的輸出緩沖暫存區 若需要完整的返回字元串 且不想經過不必要的其它中間的輸出界面 可以使用 PassThru() 實例代碼

< ?php $last_line = system( ls $retval); echo Last line of the output: $last_line; echo <hr />Return value: $retval; ?>

exec函數 說明 執行外部程序 語法 string exec(string mand string [array] int [return_var]); 返回值: 字元串 詳細介紹 本函數執行輸入 mand 的外部程序或外部指令 它的返回字元串只是外部程序執行後返回的最後一行 若需要完整的返回字元串 可以使用 PassThru() 這個函數 要是參數 array 存在 mand 會將 array 加到參數中執行 若不欲 array 被處理 可以在執行 exec() 之前呼叫 unset() 若是 return_var 跟 array 二個參數都存在 則執行 mand 之後的狀態會填入 return_var 中 值得注意的是若需要處理使用者輸入的資料 而又要防止使用者耍花招破解系統 則可以使用 EscapeShellCmd() 實例代碼

<?php echo exec( whoami ); ?> <? $fp = popen( "/bin/ls" "r" ); ?> lishixin/Article/program/PHP/201311/21017

㈢ php如何執行linux的curl指令

curl 不是即時的輸入輸出的命令,php 有運行時間限制, curl 運行會導致 curl 運行時間不夠而被殺掉的。

php 有運行 linux 命令的函數,記得 system() 是一個,之後還有另外一個。注意這兩個命令是可以在 php.ini/php.conf 裡面設置禁止使用的。

㈣ 如何在linux上直接執行php命令

在 Linux 下執行 php 腳本時通常是可以使用以下命令:

1

#/usr/local/php/bin/php test.php

為簡化輸入可把此php執行程序 到系統命令目錄下:

1

#cp /usr/local/php/bin/php /usr/sbin/

驗證:輸入以下命令,如正確獲取 php 版本,說明操作成功。

1

#php -v

這樣,以後再執行PHP腳本時可直接採用以下輸入方式即可。

1

#php a.php

㈤ php如何實現隨意執行linux命令(任意讀寫,刪除等)

顯然,你要靠php操作其范圍外的文件或目錄是不可能的,這是因為php的運行身份是apache,因此沒辦法操作root許可權的文件或目錄。
我們採取的辦法是,用VC寫個服務,該服務的運行身份是root,也就是給其最大許可權,php調用該服務做操作。
當然還有另外的辦法,這是我的猜測,你不妨試看看,
1、把php的運行用戶改為root,這樣可能會存在一定的風險。
2、在apache裡面指定可以對某個root許可權的文件或目錄做操作,該辦法沒試驗過。如果你能試驗成功的話,希望反饋一下哦。

㈥ LINUX+NGINX下的PHP shell_exec()函數執行linux命令 2019-08-08

LINUX+NGINX下的PHP shell_exec()函數執行linux命令

環境說明

手頭有一台linux的測試伺服器,最近因為業務需要,需要通過php訪問另一台伺服器去執行某些命令。

由於另一台伺服器已經對這台伺服器開了私鑰,所以在終端上是可以直接執行命令而不需要輸入密碼的。

問題

PHP無法使用exec命令,沒有任何返回值。

解決途徑

1.php.ini的配置有問題。

由於php是7.0以上的版本,取消了安全模式,所以考慮PHP.ini文件配置。

打開php配置文件,裡面有一行disabel_function的值,此處記錄了禁止運行的函數,在裡面講exec和shell_exec,system等函數刪除。

2.許可權問題

修改以後PHP可以運行部分命令了,但是部分外部程序和命令仍然不能運行。使用sudo返回失敗。

於是運行「whoami」查看,環境下php-frm的運行角色是www。

於是修改sudoers文件。

vi /etc/sudoers

將www添加到

## Allow root to run any commands anywhere

root ALL=(ALL) ALL

下面:

## Allow root to run any commands anywhere

root ALL=(ALL) ALL

www ALL=(ALL) NOPASSWD:ALL

然後找到Default requiretty這一行,把他注釋掉

# Default requiretty

ps:意思就是sudo默認需要tty終端,注釋掉就可以在後台執行了.

重啟nginx和php-fpm

service nginx restart

service php-fpm restart

這樣,PHP就可以在需要執行外部命令的時候使用sudo利用root身份執行命令,而不會報錯或者執行失敗了!

㈦ 如何通過Linux命令行使用和運行PHP腳本

1. 在安裝完PHP和Apache2後,我們需要安裝PHP命令行解釋器。

復制代碼 代碼如下:

# apt-get install php5-cli
[Debian 及類似系統]# yum install php-cli
[CentOS 及類似系統]

接下來我們通常要做的是,在 /var/www/html (這是 Apache2 在大多數發行版中的工作目錄)這個位置創建一個內容為 <?php phpinfo(); ?> ,名為 infophp.php 的文件來測試(PHP是否安裝正確),執行以下命令即可。

復制代碼 代碼如下:

# echo '<?php phpinfo(); ?>' > /var/www/html/infophp.php

然後,將瀏覽器訪問 http://127.0.0.1/infophp.php ,這將會在網路瀏覽器中打開該文件。

檢查PHP信息

不需要任何瀏覽器,在Linux終端中也可以獲得相同的結果。在Linux命令行中執行 /var/www/html/infophp.php ,如:

復制代碼 代碼如下:

# php -f /var/www/html/infophp.php

從命令行檢查PHP信息

由於輸出結果太大,我們可以通過管道將上述輸出結果輸送給 less 命令,這樣就可以一次輸出一屏了,命令如下:

復制代碼 代碼如下:

# php -f /var/www/html/infophp.php | less

檢查所有PHP信息

這里,『-f『選項解析並執行命令後跟隨的文件。

2. 我們可以直接在Linux命令行使用 phpinfo() 這個十分有價值的調試工具而不需要從文件來調用,只需執行以下命令:

復制代碼 代碼如下:

# php -r 'phpinfo();'

PHP調試工具

這里,『-r『 選項會讓PHP代碼在Linux終端中不帶 < 和 > 標記直接執行。

3. 以交互模式運行PHP並做一些數學運算。這里,『-a『 選項用於以交互模式運行PHP。

復制代碼 代碼如下:

# php -aInteractive shellphp > echo 2+3;5php > echo 9-6;3php >
echo 5*4;20php > echo 12/3;4php > echo 12/5;2.4php > echo
2+3-1;4php > echo 2+3-1*3;2php > exit

輸入 『exit『 或者按下 『ctrl+c『 來關閉PHP交互模式。

啟用PHP交互模式

4. 你可以僅僅將PHP腳本作為shell腳本來運行。首先,創建在你當前工作目錄中創建一個PHP樣例腳本。

復制代碼 代碼如下:

# echo -e '#!/usr/bin/php\n<?php phpinfo(); ?>' > phpscript.php

注意,我們在該PHP腳本的第一行使用 #!/usr/bin/php ,就像在shell腳本中那樣( /bin/bash )。第一行的 #!/usr/bin/php 告訴Linux命令行用 PHP 解釋器來解析該腳本文件。

其次,讓該腳本可執行:

復制代碼 代碼如下:

# chmod 755 phpscript.php

接著來運行它,

復制代碼 代碼如下:

# ./phpscript.php

5. 你可以完全靠自己通過交互shell來創建簡單函數,這你一定會被驚到了。下面是循序漸進的指南。

開啟PHP交互模式。

復制代碼 代碼如下:

# php -a

創建一個函數,將它命名為 addition 。同時,聲明兩個變數 $a 和 $b 。

復制代碼 代碼如下:

php > function addition ($a, $b)

使用花括弧來在其間為該函數定義規則。

復制代碼 代碼如下:

php > {

定義規則。這里,該規則講的是添加這兩個變數。

復制代碼 代碼如下:

php { echo $a + $b;

所有規則定義完畢,通過閉合花括弧來封裝規則。

復制代碼 代碼如下:

php {}

測試函數,添加數字4和3,命令如下:

復制代碼 代碼如下:

php > var_mp (addition(4,3));

樣例輸出

復制代碼 代碼如下:

7NULL

你可以運行以下代碼來執行該函數,你可以測試不同的值,你想來多少次都行。將里頭的 a 和 b 替換成你自己的值。

復制代碼 代碼如下:

php > var_mp (addition(a,b));
php > var_mp (addition(9,3.3));

樣例輸出

復制代碼 代碼如下:

12.3NULL

創建PHP函數

你可以一直運行該函數,直至退出交互模式(ctrl+z)。同時,你也應該注意到了,上面輸出結果中返回的數據類型為 NULL。這個問題可以通過要求 php 交互 shell用 return 代替 echo 返回結果來修復。

只需要在上面的函數的中 『echo『 聲明用 『return『 來替換

替換

復制代碼 代碼如下:

php { echo $a + $b;



復制代碼 代碼如下:

php { return $a + $b;

剩下的東西和原理仍然一樣。

這里是一個樣例,在該樣例的輸出結果中返回了正確的數據類型。

PHP函數

永遠都記住,用戶定義的函數不會從一個shell會話保留到下一個shell會話,因此,一旦你退出交互shell,它就會丟失了。

㈧ 如何讓PHP有許可權執行Linux下的命令

php執行linux的命令用system或exec就可以,只要打開safemode,但是一些系統底層的沒有執行命令的不允許調用哦,實在有些命令例如zip之類想用的話,直接用php寫入一個shell腳本文件再exec那個sh就好了。

㈨ 怎麼在linux的CLI下運行php文件

准備:已安裝PHP運行環境的Linux系統。

步驟:

  1. 打開Linux命令行,輸入whereis php找到PHP文件所在目錄(我的在/usr/bin/php);

  2. 回車,這時可以看到PHP文件成功執行了。

閱讀全文

與php怎麼執行Linux命令相關的資料

熱點內容
中達優控觸摸屏編譯失敗 瀏覽:80
上海科納壓縮機 瀏覽:678
python工時系統 瀏覽:549
查好友ip命令 瀏覽:116
通達信python量化交易 瀏覽:506
cnc編程工程師自我評價 瀏覽:132
書本文件夾夾子怎麼安 瀏覽:801
如何更改編譯器的背景 瀏覽:84
linuxcp拷貝文件 瀏覽:610
我的世界如何屏蔽別人伺服器 瀏覽:907
單片機燒錄員 瀏覽:970
美國數據伺服器可以部署什麼業務 瀏覽:973
如何卸載伺服器中的ie 瀏覽:42
單片機必須學編程嗎 瀏覽:153
如何判斷是否與伺服器連接資料庫 瀏覽:740
吃甜食會緩解壓力嘛 瀏覽:317
pdf魔鬼 瀏覽:29
二維數組遞歸解決演算法問題 瀏覽:382
java反射例子 瀏覽:672
惠普筆記本自帶解壓軟體 瀏覽:840