Передача переменной из sqlplus в unix, а затем в php

#php #shell #unix #sqlplus

#php #оболочка #unix #sqlplus

Вопрос:

У меня есть php-скрипт, который вызывает сценарий оболочки. Сценарий оболочки выполняет команды sql, и выходные данные передаются в переменную оболочки. Теперь, как мне передать эту переменную в PHP-скрипт?

Например: PHP-код:

 $_param1 = "JOHNDOE";
$out = exec("sh shellscript.ksh $_param1");
echo $out;
  

Сценарий оболочки:

 #!/bin/sh -u

param=$1;

out=`sqlplus -s $connectStr <<EOF

set serveroutput off;
set feedback off;
set heading off;
set pagesize 0;
set verify off;
set echo off;

select field from sometable where condition ='$param';
exit;
EOF`

echo $out;
  

Мне нужно перенести $out на страницу PHP. Есть ли другой способ, кроме создания файла?

Ответ №1:

Передайте $out в качестве параметра ‘exec’, чтобы возврат оболочки был сохранен в этой переменной.

myshell.sh

 #!/bin/bash
echo $1
  

myphp.php

 <?php
$param = "HEY, this is Output";
exec("sh myshell.sh "${param}"", $out);
print_r($out);
?>
  

Затем вызовите PHP-скрипт

 $ php myphp.php 
Array
(
    [0] => HEY, this is Output
)
  

Возможно, у вас могут возникнуть некоторые проблемы с разрешениями при выполнении оболочки или даже ваша конфигурация PHP может быть неправильной.

Комментарии:

1. Я тоже пробовал это. Я также пробовал это с функцией system() . Но, похоже, ничто никогда не заполняет выходные данные в переменной php. Когда я запускаю сценарий оболочки отдельно в командной строке Unix, требуемый вывод создается в оболочке. Есть идеи?

2. Проверьте мое обновление, я думаю, что у вас могут возникнуть проблемы с разрешениями, попробуйте вызвать этот скрипт с пользователем вашего веб-сервера, чтобы увидеть результаты.

3. У меня есть подозрение, что проблема здесь в том, что PHP не собирает данные echo’ed, то есть только значение. Он просто показывает пустой массив — Array () . Например: когда я повторяю «Привет, мир», он собирает данные и выводит их. Но для этого значения оно действует довольно странно.