Friday, April 23, 2010

PHP - 可以寫 Shell Script

每個語言都能做相同的事,例如: 列印出最經典的 Hello World! 或是 每次作業都會看到的九九乘法表,不過我就是不曉得如何請程式語言 A 去跟程式語言 B 說,請把 Hello World 給我!?時在太慚愧了,好險瞭解了 PHP 與 Shell Script 的關係是可以這樣做的,甚至是 PHP 可以直接來作 shell script 可以做的事,進一步與 Data Base 存取得到更多的資訊。

很高興的是,僅採用 PHP 的 shell_exec() 函式就能達成這件事情哦,看看以下的例子。

在 Linux commend line 取得時間
[user@local:~]$ date 

用 PHP 下指令可以這麼做!
<?php
    $output = shell_exec("/bin/date");
    echo $output;
?>
指令必須要清楚的列出在那個路徑,萬一不曉得指令在哪兒? 請用 where + 指令即可。
函式 shell_exec 官方的線上手冊

萬事不求人的 PHP 怎處理呢?
<?php
    echo date("D M d H:i:s T Y")
?>
函式 date 的參數可以參考官方的線上手冊

突然要寫萬年曆,偏偏網路上抓不到程式碼,正在苦惱的同時,也可以用 PHP 與 shell script 來處理哦,怎麼做呢? UNIX/Linux 有一個指令叫做 cal,他可以替我們完成,換個講法有內建幹嘛自己做? 於是基於程式碼或是應用在造的理念,我們可以直接使用 :)

輸出 2010 年 5 月
<?php
 $output = shell_exec("/usr/bin/cal 5 2010");
 echo "<pre>".$output."</pre>"; 
?>

可以再寫活一點,讓使用者輸入"月"和"年"
<?php
 if($_GET['month'] != NULL && $_GET['year'] != NULL){
  $output = shell_exec('/usr/bin/cal '.$_GET['month'].' '.$_GET['year']);
  echo "<pre>".$output."</pre>"; 
 }
 echo "<form action='cal2.php' method='get'>
       <b>Pleases type a <input type='text' name='month' size='5'> month and 
       <input type='text' name='year' size='5'> year.<br/>
       <input type='submit' value='Submit'></b><br/>
              </form>";
?>
範例採用 GET 處理,亦可以用 POST,畫面非常單調僅用兩個 input text。

如果想要用 PHP 寫成的 shell script 在 Linux 端執行,建議可以在每個 PHP 檔案程式前面加註
#!/usr/bin/php -q
/usr/bin 路徑一樣可以用 where php 或是 which php 找出現在正在使用的 PHP 版本程式在哪兒。

進階用法

上面都是 Web 網頁,若只想在終端機上面操作 PHP Script 可行嘛!?是可以的。這也是請出 PHP 身家(/usr/bin/php) 的原因哦,來寫個簡單的 shell script in PHP 吧!

#!/usr/bin/php -q
<?php
    echo date("D M d H:i:s T Y");
?>
啥!在開玩笑嗎? 怎麼跟上面的網頁版差不多啊。的確只差在第一行,是的請執行看看吧。

[user@localhost:www]$ php date.php
Fri Apr 23 14:06:35 EDT 2010
[user@localhost:www]$ date
Fri Apr 23 14:06:35 EDT 2010
是不是一樣呢? 如果你無法使用上述 PHP 指令,請先確認是否安裝 PHP 以及相關套件 php5-cli

apt-get install php5-cli

延伸閱讀

[1.] 用 PHP 編寫 Shell Script
[2.] PHP 透過 Sudo 執行 root 指令

No comments:

Post a Comment