我正在将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行定义$ param两次,然后在第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 ='整个命令在一个变量中'。
现在已经很晚了,我确定我太累了,不能看到它,但我需要一些帮助!!
有什么想法吗?
(顺便说一下,这是终端的输出:)
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:
答案 0 :(得分:0)
现在我知道...在命令末尾添加2&gt;&amp; 1会将输出重定向回标准输出,而不是标准错误。有趣的是,我认为我的命令输出实际上是错误而不是预期的响应是语义上的吗?