2011-05-24 203 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