【问题标题】:Multiple linux commands not returning expected results多个 linux 命令未返回预期结果
【发布时间】:2013-12-30 09:08:29
【问题描述】:

我正在将 Web 应用程序从 Windows 环境转换为 Linux (Ubuntu)。我有一个页面,在 lighttpd 和 PHP5 下提供服务,但结果很奇怪PHP 没有在安全模式下运行,我没有定义任何 disabled_functions。

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

/usr/local/bin/findscu -S -k "0008,0052=STUDY" -k "0020,000d" 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='the whole command in one variable'。

时间不早了,我确定我太累了,看不到,但我需要一些帮助!!

有什么想法吗?

(顺便说一句,这是终端的输出:)

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: 

【问题讨论】:

  • 哦 - 我已经检查过 Apache2 并且发生了同样的事情,所以现在我知道这不是 LIGHTTPD 问题。
  • 现在 - 有趣的是,我看到应该分配给我的数组 ($output) 的响应正在记录在 apache2 error.log 中?

标签: php ubuntu command-line command


【解决方案1】:

现在我知道...在命令末尾附加 2>&1 会将输出重定向回标准 输出,而不是标准 错误。有趣的是,我认为我的命令输出是否实际上是 error 而不是 expected 响应的语义!?

【讨论】:

    猜你喜欢
    • 2017-12-28
    • 2011-08-09
    • 2010-09-22
    • 2021-05-17
    • 2018-02-19
    • 2018-03-23
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多