使用shell调用PHP Server Side脚本

时间:2011-05-24 05:01:05

标签: php shell

当我运行client.sh脚本时,没有输出。当我在php中使用“system”命令时,client.sh脚本在无限循环中运行。

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

输出:

srikanth@localhost:~/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);
?>

输出:

srikanth@localhost:~/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

输出:

srikanth@localhost:~/phptest$ ./client.sh

任何建议都会有很大帮助。谢谢。

更新

根据Ibu的建议我简化了我的问题,我遇到了问题,我的server.sh脚本中有一个while循环导致问题,

1 个答案:

答案 0 :(得分:1)

当CGI脚本(server.sh)运行时,其标准输入未连接到任何内容。因此,read命令始终将ans设置为空值,该值与case语句中的任何备选项都不匹配,并且脚本将永远循环。

正如wimvds和其他人所说,你的方法根本就是错误的。 CGI脚本生成要在浏览器中显示的HTML页面。它基于客户端请求。一旦脚本有了它的参数,它就不会从任何地方获得输入(除非它打开服务器上的文件)。 Web应用程序的交互包括用户在表单中输入数据并按下提交按钮。 Unix交互(例如在stdin上输入输入和在stdout上查看输出)不能通过HTTP工作。

除此之外:"*")案例仅匹配由单个*字符组成的行。你可能意味着*),意思是匹配任何东西。