Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: вернуть из php значение в bash  (Прочитано 4773 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн uPhoenix

  • Автор темы
  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
вернуть из php значение в bash
« : 06 Января 2012, 19:18:01 »
Здравствуйте. у меня программа которая в цикле вызывает php скрипт. Как можно вернуть значение из этого скрипта в bash, что бы я мог выйти из цикла.

вот пример вызова
while true; do
((i++));
 php "/var/www/home.ru/1.php" $i
done;

и тут мне нужно цикл по переменной сделать, и когда нужно в ПХП я мог выйти из цикла. Единственное что приходит в голову это хранить значение в файле и в конце цикла проверять, нужно ли продолжать или выходить.

Спасибо

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: вернуть из php значение в bash
« Ответ #1 : 06 Января 2012, 21:28:43 »
Код: (bash) [Выделить]
while : ; do $(php <<< '<?php for($i=1;$i<10;$i++){if($i=10){echo "break";};} ?>') ; doneТипа такого?
« Последнее редактирование: 06 Января 2012, 21:36:33 от arcfi »

Оффлайн gva230

  • Активист
  • *
  • Сообщений: 981
  • GUI-овый линуксоид
    • Просмотр профиля
    • Моя дикая страничка
Re: вернуть из php значение в bash
« Ответ #2 : 06 Января 2012, 21:42:59 »
Из php можно передать какие-нибудь данные или команду в оболочку. Например так:<?php
print(`uname -a`);
?>
Kubuntu - наше фсё! :Ь

Оффлайн uPhoenix

  • Автор темы
  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
Re: вернуть из php значение в bash
« Ответ #3 : 07 Января 2012, 00:02:56 »
Код: (bash) [Выделить]
while : ; do $(php <<< '<?php for($i=1;$i<10;$i++){if($i=10){echo "break";};} ?>') ; doneТипа такого?

$(php "/var/www/home.ru/1.php" $i); так получилось, только не удобно, что вывод должен быть пустой. Я для отладки и внешнего сайта использую вывод команд, а тут придется все очищать и выводить только значение "выход".

Из php можно передать какие-нибудь данные или команду в оболочку. Например так:<?php
print(`uname -a`);
?>

Проблема при таком запуске, что команды запускаются под пользователем www-data, у которого почти не на что нет прав, я даже не могу запустить им свой скрипт.
немного не так. Я сейчас сделал через файл.
file="/var/www/home.ru/status.txt"
while read -r xx; do
status=$xx
done < $file
if [ "$status" = "exit" ] ; then
break
fi

а мне нужно по вернуть в значение $status (в bashe) значение exit из PHP скрипта. Сейчас я сделал, что бы php скрипт записывал в файл строку exit...что мне не особо нравится.
« Последнее редактирование: 07 Января 2012, 00:34:35 от uPhoenix »

Оффлайн gva230

  • Активист
  • *
  • Сообщений: 981
  • GUI-овый линуксоид
    • Просмотр профиля
    • Моя дикая страничка
Re: вернуть из php значение в bash
« Ответ #4 : 07 Января 2012, 01:16:24 »
Так я же и написал, как вернуть из php всё что угодно... Что ж, подставьте свои данные:
Скрипт PHP (~/file.php):<?php
  
print(`echo 123`);
?>

Скрипт SH (~/file.sh):#! /bin/sh

data_from_php_script=`php "/home/gva/file.php"`

if [ $data_from_php_script -eq 123 ]; then
  echo "it works!"
else
  echo "something wrong..."
fi

Результат их работы:gva@gva-VirtualBox:~$ ~/file.sh
it works!
gva@gva-VirtualBox:~$

P.S. Нужны пояснения?
« Последнее редактирование: 07 Января 2012, 01:21:57 от gva230 »
Kubuntu - наше фсё! :Ь

Оффлайн arrecck

  • Старожил
  • *
  • Сообщений: 1725
    • Просмотр профиля
Re: вернуть из php значение в bash
« Ответ #5 : 07 Января 2012, 01:30:05 »
где это будет применяться? подход совсем пи****. Может быть есть менее изващенный способ?

Оффлайн uPhoenix

  • Автор темы
  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
Re: вернуть из php значение в bash
« Ответ #6 : 07 Января 2012, 10:14:55 »
Так я же и написал, как вернуть из php всё что угодно... Что ж, подставьте свои данные:
Скрипт PHP (~/file.php):<?php
  
print(`echo 123`);
?>

Скрипт SH (~/file.sh):#! /bin/sh

data_from_php_script=`php "/home/gva/file.php"`

if [ $data_from_php_script -eq 123 ]; then
  echo "it works!"
else
  echo "something wrong..."
fi

Результат их работы:gva@gva-VirtualBox:~$ ~/file.sh
it works!
gva@gva-VirtualBox:~$

P.S. Нужны пояснения?

это пример у меня уже работает...

ai=$(php "/var/www/home.ru/1.php" $i);
if [ "$ai" = "break" ] ; then
#php "/var/www/home.ru/2.php" 0 'exit'
break
else
echo $ai
fi

но у меня код не такой же простой как в Вашем примере. У меня до нужного условия выхода еще штук 10 echo... Я конечно выкрутился, очисткой буфера в ПХП, если попадаем в это условие ( ob_start() и ob_clean()). Но это очень не практичный метод... Было бы что то наподобие передачи параметров из Bash в  PHP. Где есть массив $argv, который хранит все параметры, передаваемые скрипту ПХП.

где это будет применяться? подход совсем пи****. Может быть есть менее изващенный способ?

Я пишу систему синтеза и анализа речи человека. Т.е. у меня на бесконечном цикле происходит запись с микрофона, перекодировка файла и преобразование его в текст. В зависимости от сказаного я выполняю различные действия (на ПХП), вот и по команде "Выход" я хочу сделать выход из этого бесконечного цикла. Вся логика описана в ПХП (т.к. я больше всего с ним знаком).

Оффлайн Palatin

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
    • Сельское хозяйство
Re: вернуть из php значение в bash
« Ответ #7 : 07 Января 2012, 12:46:15 »
Цитировать
Из php можно передать какие-нибудь данные или команду в оболочку.

Есть функция system в PHP:

Код: (php) [Выделить]
<?php
  $result 
system("uname -a");
?>

Оффлайн uPhoenix

  • Автор темы
  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
Re: вернуть из php значение в bash
« Ответ #8 : 07 Января 2012, 13:12:47 »
Цитировать
Из php можно передать какие-нибудь данные или команду в оболочку.

Есть функция system в PHP:

Код: (php) [Выделить]
<?php
  $result 
system("uname -a");
?>

да, но она односторонняя!! Т.е. в ПХП я могу получить значения выполнения команды а в баш нет.

system("ai='break'");Не заносит данные в переменную $ai в баше.
а так же и команды exec('echo $i'); не видна в ПХП в качестве переменной баша.

Оффлайн gva230

  • Активист
  • *
  • Сообщений: 981
  • GUI-овый линуксоид
    • Просмотр профиля
    • Моя дикая страничка
Re: вернуть из php значение в bash
« Ответ #9 : 07 Января 2012, 16:33:27 »
но у меня код не такой же простой как в Вашем примере. У меня до нужного условия выхода еще штук 10 echo...
В смысле? Обмен данными идёт постоянно?

Было бы что то наподобие передачи параметров из Bash в  PHP. Где есть массив $argv, который хранит все параметры, передаваемые скрипту ПХП.
Возможно, имеет смысл собрать все данные в шелл, а потом их разом передать в PHP?

Честно говря, мне не очень понятно, что конкретно нужно делать. Я предложил способ обмена данными между разными скриптами.

Вся логика описана в ПХП (т.к. я больше всего с ним знаком).
Это отличный повод выучить си. :) Говорят, он очень похож на PHP.

да, но она односторонняя!! Т.е. в ПХП я могу получить значения выполнения команды а в баш нет.
Как нет? А так?<?php
  
print(`echo 123`);
?>
Баш получит 123.

Думаю, вам стоит описать подробнее алгоритм вашей программы, как вы его себе представляете.
Kubuntu - наше фсё! :Ь

Оффлайн uPhoenix

  • Автор темы
  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
Re: вернуть из php значение в bash
« Ответ #10 : 07 Января 2012, 16:47:07 »
спасибо за ответ :) с ПХП я точно не слезу (т.к. это основное направление по моей работе, и сайт для меня все же важнее фонового алгоритма работы.)

<?php
  
print(`echo 123`);
?>

так работает, т.к. мы не пытаемся взять значение переменной (которые похоже не видны между двумя скриптами). Константы выводит на ура...

что я собственно делаю...

в баше крутится постоянно скрипт.
#!/bin/bash
i=1;
while true; do
     ((i++));
     echo $i;
     rec -q -c 1 -r 16000 /var/www/home.ru/mp3/"$i"_current.wav silence 1 0.1 1% 1 0.1 1%
     flac -f -s /var/www/home.ru/mp3/"$i"_current.wav -o /var/www/home.ru/mp3/"$i"_current.flac
     ai=$(php "/var/www/home.ru/1.php" $i);
if [ "$ai" = "break" ] ; then
break
else
echo $ai+1
fi
done;

который записывает звук с микрофона, а затем передает на исполнение данные в php. Файлы ПХП уже организуют отправку мп3 файла на распознавание. По факту распознавания выполняется дальнейшее действие. В данный момент я реализую обработку фразы "Выход". Т.е. программа анализирует, что было названо это слово и пхп возвращает строку 'break'. По которой и осуществляется выход.
Сейчас уже работает, но только через вывод по завершению ПХП строки break. А я хочу из ПХП заменить значение переменной баша, т.к. файл 1.пхп выводит кучу информации, которую приходится обрезать при условии что надо сказать 'break'.

Вроде понятно объяснил  ???

Оффлайн gva230

  • Активист
  • *
  • Сообщений: 981
  • GUI-овый линуксоид
    • Просмотр профиля
    • Моя дикая страничка
Re: вернуть из php значение в bash
« Ответ #11 : 07 Января 2012, 17:17:42 »
Вроде понятно объяснил  ???
Вроде да. :)
Я так понял, что PHP сыпет в шелл кучу инфы, кроме заветного "break". То есть, кроме сигнала о завершении работы, есть ещё что-то нужное и именно в баше?
Kubuntu - наше фсё! :Ь

Оффлайн uPhoenix

  • Автор темы
  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
Re: вернуть из php значение в bash
« Ответ #12 : 07 Января 2012, 17:31:40 »
Вроде понятно объяснил  ???
Вроде да. :)
Я так понял, что PHP сыпет в шелл кучу инфы, кроме заветного "break". То есть, кроме сигнала о завершении работы, есть ещё что-то нужное и именно в баше?

нужное но не в баше... и просто exec('break'); не дает результата, работает только через выше приведеный пример, когда я весь! вывод 1.пхп вставляю в переменную...

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: вернуть из php значение в bash
« Ответ #13 : 08 Января 2012, 07:17:15 »
Сейчас уже работает, но только через вывод по завершению ПХП строки break. А я хочу из ПХП заменить значение переменной баша, т.к. файл 1.пхп выводит кучу информации, которую приходится обрезать при условии что надо сказать 'break'.
 Вроде понятно объяснил  ???
 

Понятно?.. Мне нет.

Я так понял, что PHP сыпет в шелл кучу инфы, кроме заветного "break". То есть, кроме сигнала о завершении работы, есть ещё что-то нужное и именно в баше?
нужное но не в баше... и просто exec('break'); не дает результата, работает только через выше приведеный пример, когда я весь! вывод 1.пхп вставляю в переменную...

Ну так и должно быть.
Что, нельзя отладочную информацию работы скрипта 1.php выводить в лог и смотреть этот файл параллельно через tail (притом, что сам скрипт возвращает только финальную команду для bash)?

Оффлайн uPhoenix

  • Автор темы
  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
Re: вернуть из php значение в bash
« Ответ #14 : 08 Января 2012, 17:26:29 »
можно :) спасибо большое за помощь :) я просто думал есть возможность напрямую поменять значение переменной (как с глобальными). Но раз нельзя. То будет работать как уже реализовал :)

единственное что осталось. Но это похоже не исправить... Если пхп скрипт запускается из под баша, то создатель процесса пхп будет пользователь, под которым запущен скрипт. А если я хочу, зайдя в браузер на свой хост выполнить какой либо ЕХЕС строку баша, то прав хватает только на ограниченное количество команд. Хотя так правильней конечно если смотреть со стороны безопасности. Но неудобно немного :)

спасибо всем за помощь!

 

Страница сгенерирована за 0.053 секунд. Запросов: 25.