【发布时间】:2020-08-20 19:55:26
【问题描述】:
我有一个带有一堆可执行文件 (DCMTK) 的外部库。通常,这些可以在 CLI 上执行,有时会在终端中显示输出。我想在 PHP 脚本中使用其中的一些,我可以用一个来做到这一点。
要点是:
// path to the executables.
private static $dcmtk_path = '/usr/local/opt/dcmtk/bin/';
//method to execute the dcmtk executable.
public static function dcmtk_command($command) {
//--logfile dcmlogfile.cfg
echo exec(self::$dcmtk_path . $command); // $outputarray, 2nd arg ?
}
}
// working example that converts a text file to a dcm worklist file
file_put_contents (self::$MWL_PATH . "samplephp.txt", $template); // text file for MWL.
echo '[{"status":"Sent to PATH"}]';
self::dcmtk_command('dump2dcm ' . self::$MWL_PATH . "samplephp.txt " . self::$MWL_PATH . "samplephp.wl");
我不知道这是否可能。但是,我通过 $_POST 上传多个文件并得到:
$file_tmp = $files['tmp_name'];
这是保存到服务器上的一个路径:
$success = move_uploaded_file($file_tmp, $upload_path);
然后我想执行另一个命令:
self::dcmtk_command('dcmdump ' . $upload_path . $file_name );
// dcmdump +P StudyInstanceUID IM-0001-0004.dcm for specific tag
当从 CLI 执行时,将一堆文本打印到终端 (?STDOUT)。我想要做的是在 PHP 脚本中捕获该输出,以便我可以处理输出。我尝试了一些东西,比如使用输出缓冲区、exec 命令中的 $outputarray 等。
似乎应该可以。这些文件将保存在服务器上配置的路径中,因此它们应该位于 $upload_path 。 $文件名。而且,我在 PHP 控制台/错误日志中看不到任何错误。我实际上没有很好的方法来检查命令是否成功。
【问题讨论】:
-
从您的问题中不清楚为什么使用 2nd parameter of
exec()是不够的。还有其他几个相关的内置选项 -passthru()和shell_exec()- 你尝试过其中任何一个吗? -
谢谢。这很有帮助:stackoverflow.com/questions/2320608/php-stderr-after-exec 另外,类文件有一些问题,所以我现在只是将它们全部放入一个脚本中以使其正常工作。既然它正在工作,也许可以再开一堂课。真的很不错。
-
@Don't Panic 你有联系方式吗?