多个linux命令未返回预期结果


Multiple linux commands not returning expected results

我正在将一个web应用程序从Windows环境转换为Linux(Ubuntu)。我有一个页面,在lighttpd和PHP5下提供,我得到了奇怪的结果HP没有在安全模式下运行,我没有定义任何禁用的功能。

我正在尝试模仿以下终端命令:

/usr/local/bin/findscu-S-k"00080052=研究"-k"0020000d"192.168.56.1 5678

当从终端运行时,这导致返回信息流,从而产生8行信息。每个参数之间都有空格(只是想确保这里注意到这一点)。

我的PHP文件包含以下

$cmd = '/usr/local/bin/findscu';
$param = ' -S -k "0008,0052=STUDY" -k "0020,000d" 192.168.56.1 5678';
$param = ''; // $retVal = 0, $output=63 elements
$fullcmd = $cmd.$param;
$perms = fileperms($cmd);
$info = exec($fullcmd,$output,$retVar);
echo $fullcmd;
echo '<p>Permissions : '.substr(sprintf('%o', fileperms($cmd)), -4);
echo '<p>I am running as '.exec('whoami');
echo '<p>Return value : '.$retVar;
echo '<br>No of elements : '.count($output);
if(count($output)>1){
    echo '<pre>';
    print_r($output);
    echo '</pre>';
    }

正如您所看到的,我在第2行和第3行定义了两次$param,有效地将$param重写为空白。当我运行这个程序时,我会得到与在终端上相同的结果,基本上是findscu的"man"页面,包含64行输出(返回数组的63个元素)

/usr/local/bin/findscu
Permissions : 0755
I am running as www-data
Return value : 0
No of elements : 63
Array
(
    [0] => $dcmtk: findscu v3.6.0 2011-01-06 $
    [1] => 
    [2] => findscu: DICOM query (C-FIND) SCU
    [3] => usage: findscu [options] peer port [dcmfile-in...]

等等

然而,当我注释第3行时,因此正如我所期望的那样定义了我的$param变量,我得到了$retVar=0(这很好,命令运行时没有错误),但返回数组的计数也包含0个元素。

这是生成的页面内容:

/usr/local/bin/findscu -S -k '0008,0052=STUDY' -k '0020,000d' 192.168.56.1 5678
Permissions : 0755
I am running as www-data
Return value : 0
No of elements : 0

我看不出我到底做错了什么。我确信这与空格有关,但我看不出来。我尝试过用双引号、单引号、反斜杠分别设置$param,甚至尝试过$cmd="一个变量中的整个命令"。

天已经晚了,我肯定太累了,看不见了,但我需要帮助!!

有什么想法吗?

(BTW,这是来自终端的输出:)

root@ubuntu:/home/pry/OSID# /usr/local/bin/findscu -S -k '0008,0052=STUDY' -k '0020,000d' 192.168.56.1 5678
W: ---------------------------
W: Find Response: 1 (Pending)
W: 
W: # Dicom-Data-Set
W: # Used TransferSyntax: Little Endian Implicit
W: (0008,0052) CS [STUDY ]                                 #   6, 1 QueryRetrieveLevel
W: (0020,000d) UI [1.3.46.670589.5.2.10.2156913941.892665384.993397] #  48, 1    StudyInstanceUID
W: 

现在我知道了。。。追加2>&命令末尾的1将输出重定向回标准输出,而不是标准error。有趣的是,我想这是关于我的命令输出是否实际上是错误的语义,而不是预期的响应!?