[精讚] [會員登入]
1262

[PHP] 讀取作業系統程式執行結果

PHP讀取作業系統程式執行結果

分享此文連結 //n.sfs.tw/11790

分享連結 [PHP] 讀取作業系統程式執行結果@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-22 09:38:46 最後編修
2017-09-21 19:28:14 By 張○○
 

自動目錄

PHP有system、exec、passthru、eval 這些函數可以將系統執行的結果輸出,我們想要把結果貼到網頁上。

i.php

system("ping -c 1 211.75.194.243");

執行

# php i.php
PING 211.75.194.243 (211.75.194.243) 56(84) bytes of data.
64 bytes from 211.75.194.243: icmp_seq=1 ttl=64 time=0.059 ms

--- 211.75.194.243 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.059/0.059/0.059/0.000 ms

結果:

PING 211.75.194.243 (211.75.194.243) 56(84) bytes of data.
64 bytes from 211.75.194.243: icmp_seq=1 ttl=64 time=0.059 ms

--- 211.75.194.243 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.059/0.059/0.059/0.000 ms

如果要用PHP呼叫要把結果用變數取回,會發現困難,因為有些系統函數本身就會出輸結果,例如上面的 ping

我們想企圖利用變數來接system傳回的值,因為它只會取回最後一行的結果,同時也會把system本身的內容輸出。假如想用nl2br來解決也是無用,因為system本身早就把結果輸出了。

$a= system("ping -c 1 163.17.40.1");
echo "a=". $a;

結果:

PING 211.75.194.243 (211.75.194.243) 56(84) bytes of data.
64 bytes from 211.75.194.243: icmp_seq=1 ttl=64 time=0.059 ms

--- 211.75.194.243 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.059/0.059/0.059/0.000 ms

a=rtt min/avg/max/mdev = 0.059/0.059/0.059/0.000 ms

使用中介檔來解決

有一些方法可以解決這個問題,就是利用一個中介檔案

先讓結果輸出到中介檔,再讀取,這樣的好處就是不會輸出到螢幕上。

$file = "/tmp/postfixstatus";
system("ping -c 1 211.75.194.243 > $file");  // 把結果輸出到一個中介檔
$data = file_get_contents($file); // php5以上可以使用這個函數來替代fopen。
echo nl2br($data);

原文 2012-01-30 17:14:30

END

你可能感興趣的文章

[PHP] 陣列新增資料及整理 在php陣列加入項目和重新整理陣列的方法

PHP 產生連續的日期 要用PHP產生連續的日期,連續月份

[CodeIgniter3] CI3 Session 失敗的問題 這次把我的程式放到Centos8,結果sesssion 一直沒作用,真的不知道發生了什麼事?

[PHP] 字串拆解函數substr 奇異的錯誤(札記) 偶然發現一個 substr函數拆解上的怪異之處

使用strcmp來判斷日期是否介於某日期之間 要比較現在日期是否在兩個日期之間,使用字串比對的方法

[PHP] preg_match 的貪婪和不貪婪比對 在php preg_match中預設是採用貪婪比對,太貪婪反而不符合需要,因此得採用「非貪婪比對」...

隨機好文

[MAC] 截取螢幕畫面的方法 截取螢幕畫面的方法,在MAC中叫作螢幕快照,英文是screenshot

[jQuery] 利用load()來達成ajax的寫法 jQuery中利用load()來達成ajax的寫法,也有人稱他是假的ajax,作法就是..

[Freebsd] 使用 ADSL 撥接上網 Freebsd上要使用 ADSL 撥接上網,該如何設定?

TFTP Server 安裝及使用 讓設備的網路設定檔或是韌體經由TFTP拷備出來,操作的方法

[JAVA] JWS, JWT, JWE, JOSE是什麼? [JAVA] JWS, JWT, JWE, JOSE是什麼?非常的複雜,儘量來搞清楚..