#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 () . Например: когда я повторяю «Привет, мир», он собирает данные и выводит их. Но для этого значения оно действует довольно странно.