2011-05-24 64 views
0

當我運行client.sh腳本時,沒有輸出。當我在php中使用「system」命令時,client.sh腳本在無限循環中運行。使用shell調用PHP Serverside腳本

Server.sh: 代碼:

#!/bin/bash 

while : 
do 
     printf "Do you want to continue:[Y/N]\n" 
     read ans 
     case $ans in 
       "Y")continue;; 
       "N")echo "Thank you" 
        exit 0;; 
       "*")echo "Wrong choice" 
        continue;; 
     esac 
done 

輸出:

[email protected]:~/www/phpshell$ ./scm.sh 
Do you want to continue:[Y/N] 
Y 
Do you want to continue:[Y/N] 
N 
Thank you 

Calls.php: 代碼:

<?php 
$cmd="/home/srikanth/phptest/server.sh"; 
pcntl_exec($cmd); 
?> 

輸出:

[email protected]:~/phptest$ php calls.php 
Do you want to continue:[Y/N] 
Y 
Do you want to continue:[Y/N] 
N 
Thank you 

Client.sh 代碼:

#!/bin/bash 
curl http://cxps103/svnadmin/calls.php 

輸出:

[email protected]:~/phptest$ ./client.sh 

任何建議,將有很大幫助。謝謝。

更新:

按照伊布的建議,我簡化了我的問題,我已經得到了問題,在我的server.sh腳本while循環,其引起的,

+2

這是一個很多需要閱讀的內容,你如何寫只有有問題的部分 – Ibu 2011-05-24 05:08:24

+0

@lbu,我只有在client.sh腳本中沒有顯示任何輸出的問題。請求讓我知道如何調用calls.php腳本。在此先感謝 – Srikanth 2011-05-24 05:31:10

+0

如果您沒有運行網絡服務器,那麼「捲曲」是非常沒有意義的。 – 2011-05-24 07:12:51

回答

1

當CGI腳本( server.sh)運行時,其標準輸入不與任何東西連接。因此,read命令始終將ans設置爲一個空值,該值與case語句中的任何替代方式均不匹配,並且腳本永遠循環。

由於wimvds和其他人已經指出,你的做法是根本錯誤的。 CGI腳本生成一個HTML頁面以在瀏覽器中顯示。它基於客戶請求進行操作。一旦腳本有其參數,它就不會從任何地方獲得輸入(除非它在服務器上打開文件)。 Web應用程序的交互包括用戶在表單中輸入數據並按下提交按鈕。 Unix交互(例如在標準輸入上輸入輸入並在stdout上查看輸出)不能通過HTTP進行。

另外:"*")的情況只會匹配由單個*字符組成的行。你可能意思是*),意思是匹配任何東西。

+0

感謝您糾正我。我將使用SSH方法生成交互式bash腳本。再次感謝。 – Srikanth 2011-05-24 08:55:28