Вызов сценария PHP Serveride с использованием оболочки - PullRequest
0 голосов
/ 24 мая 2011

Когда я запускаю скрипт client.sh, никаких выходных данных нет.И когда я использую команду «system» в php, скрипт 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

Любое предложение очень помогло бы.Спасибо.

Обновление:

По предложению Ибу упрощаю мой вопрос, у меня возникла проблема, в моем скрипте server.sh есть цикл while, которыйвызывая проблему,

1 Ответ

1 голос
/ 24 мая 2011

Когда выполняется скрипт CGI (server.sh), его стандартный ввод не связан ни с чем. Поэтому команда read всегда устанавливает ans в пустое значение, которое не соответствует ни одной из альтернатив в операторе case, и сценарий зацикливается навсегда.

Как отметили wimvds и другие, ваш подход в корне неверен. CGI-скрипт генерирует HTML-страницу для отображения в браузере. Он действует на основе запроса клиента. Как только у скрипта есть свои аргументы, он не получает данные откуда угодно (если только он не открывает файлы на сервере). Взаимодействие для веб-приложения состоит в том, что пользователь вводит данные в форму и нажимает кнопку отправки. Unix-взаимодействия, такие как ввод ввода в stdin и просмотр вывода в stdout, не работают через HTTP.

В сторону: регистр "*") будет соответствовать только строке, состоящей из одного символа *. Вы, вероятно, имели в виду *), что означает совпадение с чем-либо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...